2013-07-11 50 views
0

我遇到了问题,我一直在为它工作过去三个小时左右,还没有找到解决方案。在SQL Server平台上运行。我有一张看起来像这样的桌子。寻找缺失的行T-SQL

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

所以每个PT只有三个ITMs – Sunny

回答

3

如果你希望每PT 3 ITM,查询将

select PT 
FROM MYTABLE 
GROUP BY PT 
HAVING COUNT(ITM) < 3 

用于需要更复杂的查询的其他条件。

+0

谢谢......这使我更接近我需要的东西。 – jlimited

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