我有一个大约1.6M行的表,其中记录具有唯一(标识)ID,然后还有一个8个字符的“代码”字段。它用于将数据分组的代码字段...具有相同代码的所有行都在同一个集合中。每个集合应包含12个记录,但似乎我们的数据加载已关闭且某些集合不完整。
我需要识别不完整的集合。如何编写查询以仅选择那些在集合中没有正确数量的记录的集合中的那些记录(12)?
我正在使用MS SQL 2008。
感谢。
答案 0 :(得分:6)
试试这个...
SELECT
CodeField,
COUNT(CodeField)
FROM table
GROUP BY CodeField
HAVING COUNT(CodeField) < 12
答案 1 :(得分: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
Nitpick:!=
是ANSI-92,而<>
答案 2 :(得分:1)
这将为您提供需要更新的个人记录:
SELECT *
FROM MyTable
WHERE CodeField IN
(
SELECT CodeField,
COUNT(CodeField) AS [Count]
FROM MyTable
GROUP BY CodeField
HAVING COUNT(CodeField) <> 12
)
答案 3 :(得分:1)
这是使用having
子句的完美案例:
select codefield, count(*) from YOURTABLE
group by codefield
having count(*) <> 12
HAVING子句允许您将包含GROUP BY
的查询结果限制为仅匹配特定条件的记录。您可以将其视为WHERE
子句的变体,该子句适用于分组结果集。
查询可以包含WHERE
和HAVING
子句 - 但是,要意识到在WHERE
子句中的谓词在结果被分组之前被评估,而HAVING
子句中的谓词在{ {1}}子句在。
答案 4 :(得分:1)
请注意,我使用的是<>
而不是<
。这将识别可能包含太多项目的代码以及代码太少的代码。
select code, count(*) as count
from MyTable
group by code
having count(*) <> 12
答案 5 :(得分:0)
这应该有效:
select CodeField, count(*)
from yourtable
group by CodeField
having count(*) <> 12
答案 6 :(得分: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
享受!