2014-12-03 120 views
0

我需要运行比较并返回差异。我发现很难用语法表达SQL查询。逻辑在那里,我可以解释,但语法暗示我,你能帮忙吗?将SQL查询结果返回设置为具有不同值的相同ID

我有一个表(位置)在一个架构中承载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时了解

+0

你使用了哪个数据库?适当标记问题。 – 2014-12-03 00:10:58

回答

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 
相关问题