2011-10-26 4 views
3

には限界が私は、MySQLでクエリを持っている:エミュレートグループによるため、MySQLからのMSのSQL 2000

select slscod,slsname,brc 
from td_casa 
group by slscod 
order by slsname 
limit 0,100 

このクエリは、slsname昇順で注文slsnamebrcでトップ100のユニークな販売コードを取得します。

MSSQL 2000でこのクエリを変更するにはどうすればよいですか?

+0

SQL Serverで実行しようとしましたか?エラーメッセージが返されますか? –

+0

@ a'r:これは非常に明白な有効なSQL Serverの構文ではありません。これはなぜ質問が尋ねられたのですか... – gbn

答えて

3

基本的な構文は次のとおりです。

select top 100 slscod,slsname,brc 
from td_casa 
group by slscod 
order by slsname 
+0

は動作しません、エラーが発生します:[Err] 42000 - [SQL Server]列 'td_casa.slsname'が選択リストに無効です。集計関数またはGROUP BY句を使用します。 –

+0

slsnameとbrcを行ごとに追加します... – Sparky

2
SELECT TOP 100 slscod, slsname, brc 
FROM td_casa 
GROUP BY slscod, slsname, brc 
ORDER BY slsname 

注:あなたのコメントについて列「XYZ」私はあなたが3列を選択するが、指定されたことに気づい選択...エラーで無効であるについて1列目のGROUP BY節にあります。 hereを説明したように、これはMySQLの特定の動作です:

MySQLは GROUP BY句に記載されていないフィールドを選択可能にするために、GROUP BYの使用を拡張します。クエリの結果が にならない場合は、第11.15項「GROUP BY句で を使用するための関数と修飾子」に記載されているGROUP BYの の説明を参照してください。 MSSQL 2000年にようやくROW_NUMBER()LIMIT ... OFFSET .. をサポートしていません

+0

たとえば、mysqlで上限をとると問題が発生しました。開始レコード30を100にしたいと思います。これはmysqlクエリにあります:select slscod、slsname、 td_casaグループからのbrc slsname limitによるslscod order by 30,100。 MSSQL 2000でこのクエリを変更するには? –

+0

@IrfaniFirdausy:これを参照してください:http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server –

+0

そしてこの記事:http://www.sqlservercentral.com/articles/T-SQL/66030/ –

0

ので、私はこのクエリが見つかりました:これは同じである

SELECT slscod, MIN(slsname) slsname, MIN(brc) brc FROM (
    SELECT top 30 slscod, MIN(slsname) slsname, MIN(brc) brc FROM 
    (
     SELECT TOP (1*30) slscod, MIN(slsname) slsname, MIN(brc) brc 
     FROM td_casa group by slscod 
     ORDER BY slsname ASC 
    ) AS t1 group by slscod 
    ORDER BY slsname DESC) AS t2 group by slscod ORDER BY MIN(slsname) ASC 

場合、MySQLで:

select slscod,slsname,brc from td_casa group by slscod order by slsname limit 0,30 

あなたが変更した場合TOP (2*30)これは同じlimit 30,30です。 TOP (3*30)これは同じlimit 60,30などです。

努力が切望されています。 all.letの歓声に感謝

関連する問題