SQL Query结果返回设置为具有不同值的相同id

时间:2014-12-03 00:09:50

标签: mysql sql-server

我需要运行比较并返回差异。我发现很难用一种有效的语法来表达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

1 个答案:

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