1

次の出力を持つクエリがあります

SELECT  BIN_NAME,ROW_NUMBER() Over(Order by BIN_NAME) C
FROM USR_BINS_ITEMS I 
LEFT JOIN USR_BINS B ON I.BIN_COD=B.BIN_COD 
WHERE I.LOC_ID='6' 
And I.ITEM_NO = '364001' 

そして出来上がりは……。

Bin     c
--------------
E1-03   1    
E1-08   2    
E2-01   3

しかし、私は自分の出力を

E1-03   ,  3

つまり、最初の行ビン値のみを選択しますが、合計行数 (または列 C の最大値) も表示します。MS SQL Server 2008 を使用しています。

4

2 に答える 2

3

欲しいだけですか:

SELECT MIN(BIN_NAME) as BIN_NAME, COUNT(*) AS BIN_COUNT
FROM ...
于 2012-09-13T21:45:26.243 に答える
1

これを試して:

SELECT TOP 1 BIN_NAME, X.TOTAL
FROM USR_BINS_ITEMS I

LEFT JOIN USR_BINS B
ON I.BIN_COD = B.BIN_COD

INNER JOIN (
    SELECT COUNT(*) AS TOTAL
    FROM USER_BINS_ITEMS I2
    WHERE I2.LOC_ID = '6' And I2.ITEM_NO = '364001'
) X ON TRUE

WHERE I.LOC_ID = '6' And I.ITEM_NO = '364001';

SELECT BIN_NAME, (SELECT COUNT(*) ...) AS TOTAL ...検索を 2 回実行する必要がありますが、クエリ プランナーがそのケースを最適化するほど賢くないと仮定すると、サブクエリ ( ) を使用するよりもパフォーマンスが向上するはずです。

いずれにせよ、このクエリは非常にうまく機能し、要件を満たすはずです。

ORDER BY節がない場合、データベース エンジンは結果セットから任意の行を自由に返すことができることに注意してください。ORDER BY特定の行を取得する場合は、句を追加します。

于 2012-09-13T21:20:19.457 に答える