2016-09-07 68 views
1

我正在使用以下SQL查詢來獲取20個以下的幾個項目類型的計數。我想要做的是提取屬於該類別的所有行。還有其他類型的計數超過20,但我不特別在意這些。SQL計數類型並返回這些計數下的所有項目

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還很陌生。

回答

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 
) 
+0

謝謝!我沒有意識到我可以將兩個查詢合併爲一個。這給了我需要的結果。 – SilentVanRetz

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; 
+0

這工作得很好。我喜歡查詢的複雜性。我感謝您的幫助。 – SilentVanRetz