带计数的前1行

时间:2012-09-13 21:16:47

标签: sql tsql

我有一个带有以下输出的查询

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。

2 个答案:

答案 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子句。