我遇到了一个问题,过去三个小时左右我一直在研究这个问题而且还没有找到解决方案。在SQL Server平台上运行。我有一个看起来像这样的表。
PT ITM VAL
-- --- ---
01 01 A
01 02 B
01 03 C
02 01 A
02 03 C
03 01 A
03 02 B
我正在尝试找到哪些PT缺少项目编号。
在上述情况下,PT02和PT03缺少两个项目。这是我开始的基础,但我不确定我是否在正确的轨道上。
select t.PT,t.ITM
FROM MYTABLE t
GROUP BY t.PT,t.ITM
HAVING COUNT(*) > 1
由于 jlimited
答案 0 :(得分:3)
如果您期望每个PT有3个ITM,则查询将是
select PT
FROM MYTABLE
GROUP BY PT
HAVING COUNT(ITM) < 3
对于其他条件,需要更复杂的查询。
答案 1 :(得分:2)
这是有效的解决方案。我必须选择一个已填充的VAL,以找到不是的值。
select stg.PT,COUNT(stg.ITM) AS ITM_CNT
FROM MYTABLE stg
WHERE stg.ITM IS NOT NULL
AND stg.VAL IN (11)
GROUP BY stg.PT
HAVING COUNT(stg.ITM) > 1
EXCEPT
select stg.PT,COUNT(stg.ITM) AS ITM_CNT
FROM MYTABLE stg
WHERE stg.ITM IS NOT NULL
AND stg.VLA IN (4,5)
GROUP BY stg.PT
HAVING COUNT(stg.ITM) > 1