2010-08-24 31 views
0

我有一個約1.6M行的表,其中記錄具有唯一的(身份)ID,然後也有8個字符的「代碼」字段。用於將數據分組爲集的代碼字段...具有相同代碼的所有行都在同一個集合中。每組應包含12條記錄,但似乎我們的數據加載已關閉,並且某些組不完整。在SQL中計數數據組

我需要識別不完整的集合。我將如何編寫一個查詢來選擇那些屬於集合中沒有正確數量記錄的集合中的記錄(12)?

我正在使用MS SQL 2008.

謝謝。

+2

你現在可以從大約20個正確答案中選擇正確答案;-)。祝你好運... – 2010-08-24 15:56:44

回答

6

試試這個...

SELECT 
CodeField, 
COUNT(CodeField) 
FROM table 
GROUP BY CodeField 
HAVING COUNT(CodeField) < 12 
+0

+1:你在16秒內擊敗我 – 2010-08-24 15:54:49

+0

我並不期待這麼快就能得到很多答案。謝謝大家!工作得很好。 – 2010-08-24 16:41:12

1

這會給你需要更新的個人記錄:

SELECT * 
    FROM MyTable 
    WHERE CodeField IN 
    (
     SELECT CodeField, 
     COUNT(CodeField) AS [Count] 
     FROM MyTable 
     GROUP BY CodeField 
     HAVING COUNT(CodeField) <> 12 
    ) 
+1

錯誤 - IN子句中的字段太多。你有一個比較兩個 - MySQL支持元組,但我沒有嘗試過SQL Server。這也可以在同一個表上運行兩次,當它可以一次完成時 - 子查詢就是你所需要的。 – 2010-08-24 15:59:40

4

使用此得到表中少於12條守則:

SELECT yt.code 
    FROM YOUR_TABLE yt 
GROUP BY yt.code 
    HAVING COUNT(*) < 12 

在這個練習中,你必須使用HAVING條款 - 本WHERE子句不允許您在子查詢中使用聚合函數(MIN,MAX,COUNT ...),但HAVING子句不具有該限制。

要獲得代碼都少於或多於12條表中的記錄,使用:

SELECT yt.code 
    FROM YOUR_TABLE yt 
GROUP BY yt.code 
    HAVING COUNT(*) != 12 

雞蛋裏挑骨頭:!=是ANSI-92,VS <>

+0

Bah! 14秒! – LittleBobbyTables 2010-08-24 15:55:02

+0

rofl。還是投你一個隊友 – 2010-08-24 15:55:54

+0

@LittleBobbyTables:你越來越近了 - 差點太近了:p – 2010-08-24 16:02:52

1

這是使用了一個完美的情況下, having條款:

select codefield, count(*) from YOURTABLE 
group by codefield 
having count(*) <> 12 

HAVING子句允許您限制包括查詢結果只是符合某些條件的記錄。你可以把它看作WHERE子句的一個變體,它適用於分組結果集。

查詢可以既包括WHEREHAVING子句 - 然而,要認識到的結果被分組之前WHERE子句中的謂詞進行求值,而HAVING子句中的謂詞後進行評價。

1

請注意,我已使用<>而不是<。這將識別可能具有太多項目的代碼以及具有太少的代碼。

select code, count(*) as count 
from MyTable 
group by code 
having count(*) <> 12 
0

這應該工作:

select CodeField, count(*) 
    from yourtable 
    group by CodeField 
    having count(*) <> 12 
0

你可以用一組由做到這一點。類似以下內容:

select 
    groups.code, 
    groups.code_count 
from 
    (select 
     code, 
     count(code) code_count 
    from 
    records_table 
    group by code) groups 
where 
    groups.code_count != 12 

享受!