我有一个带有以下输出的查询
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
这意味着,仅选择FIRST Row Bin Value BUT也显示总行数(或C列的最大值)。我正在使用MS SQL Server 2008。
答案 0 :(得分:2)
你只想要:
SELECT MIN(BIN_NAME) as BIN_NAME, COUNT(*) AS BIN_COUNT
FROM ...
答案 1 :(得分: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 ...
)更高效,假设查询规划器不够智能,无法优化该情况。
无论哪种方式,此查询都应该能够很好地执行并满足您的要求。
请注意,如果没有ORDER BY
子句,数据库引擎可以自由地从结果集中返回它所希望的任何行。如果要获取某些特定行,请添加ORDER BY
子句。