0

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

4

2 回答 2

3

如果您期望每个 PT 有 3 个 ITM,则查询将是

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

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

于 2013-07-11T20:14:22.303 回答
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
于 2013-07-11T20:55:58.007 回答