寻找丢失的行T-SQL

时间:2013-07-11 20:08:15

标签: sql-server tsql

我遇到了一个问题,过去三个小时左右我一直在研究这个问题而且还没有找到解决方案。在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

2 个答案:

答案 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