SQL Count Types并返回这些计数下的所有项目

时间:2016-09-07 15:12:36

标签: sql-server

我正在使用以下SQL查询来获取20下的几个项类型的计数。我要做的是提取属于该类别的所有行。还有其他类型超过20但我并不特别关心这些。

 SELECT ITEM_TYPE, COUNT(ITEM_NUMBER) As "COUNT"
     FROM TOTAL_COLLECTION 
     group by ITEM_TYPE
     HAVING Count(ITEM_TYPE) < 20;

结果:

C15     9
C1SRT   1
CA7     7
D4S5M   10
D4S7M   4
D5S7E   2

例如:我有9个属于C15的计数。

SELECT LTRIM(RTRIM(ITEM_TYPE)) AS ITEM_TYPE, ITEM_STATUS, ITEM_NUMBER
FROM TOTAL_COLLECTION 
WHERE ITEM_TYPE in ('c15')

C15 2   000540176
C15 2   000384552
C15 2   000452976
C15 2   000372632
C15 2   000573561
C15 2   000592110
C15 2   000465054
C15 2   000394784
C15 2   000400305

我正在尝试合并第一个查询的结果,以便为我提供所有这些类型的完整列表。所有字段都在一个表中找到。

我试图找到这个问题的答案,但我无法找到一个。如果我以某种方式错过了这个,我为复制道歉。我仍然是SQL新手。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT LTRIM(RTRIM(ITEM_TYPE)) AS ITEM_TYPE, ITEM_STATUS, ITEM_NUMBER
FROM TOTAL_COLLECTION 
WHERE ITEM_TYPE in (
    SELECT ITEM_TYPE
    FROM TOTAL_COLLECTION 
    group by ITEM_TYPE
    HAVING Count(ITEM_TYPE) < 20
)

答案 1 :(得分:0)

假设SQL Server 2008+,您可以使用OVER子句:

WITH CTE AS
(
    SELECT  *,
            N = COUNT(*) OVER(PARTITION BY ITEM_TYPE)
    FROM dbo.TOTAL_COLLECTION
)
SELECT  LTRIM(RTRIM(ITEM_TYPE)) AS ITEM_TYPE, 
        ITEM_STATUS, 
        ITEM_NUMBER
FROM CTE 
WHERE N < 20;