我需要运行比较并返回差异。我发现很难用一种有效的语法来表达SQL查询。逻辑在那里,我可以解释,但语法暗示我,你能帮忙吗?
我在一个架构中有1个表(位置),其中包含2个主键' locationID'和' materialID'。现在我在我的桌子上有3个位置 - PlayM PlayB和Ing。通常情况下,我在每个位置都有一个materialID。
我需要检查的是每个locationID上每个materialID的整数值持续时间。如果一个持续时间与其对等点不匹配,则返回的结果是每个位置上的所有materialID都与持续时间不一致。
实施例;
+------------+------------+----------+
| LOCATIONID | MATERIALID | DURATION |
+------------+------------+----------+
| PlayM | Clip1 | 626 |
| PlayB | Clip1 | 626 |
| Ing | Clip1 | 626 |
| PlayM | Clip2 | 600 |
| PlayB | Clip2 | 590 |
| Ing | Clip2 | 600 |
+------------+------------+----------+
Clip1不会返回结果,因为所有位置都具有相同的持续时间。但是,剪辑2应报告所有3,因为其中一个持续时间不同。
我的示例查询如下...注意我在提到不相等时丢失了:(
SELECT * FROM locations
WHERE materialID IN (SELECT materialID WHERE duration <>
你能帮忙吗?
...谢谢
SQL Learn
答案 0 :(得分:0)
如果你正在使用SQL SERVER
:
;with cte as(
select
*,
cc = count(*) over(partition by MaterialId),
ccc = count(*) over(partition by MaterialId, Duration)
from Locations
)
select
LocationId,
MaterialId,
Duration
from cte
where cc <> ccc