2015-04-22 75 views
0

样本数据:TSQL寻找失踪值重复记录

PageID Attribute 
2860 Category 
2860 Sub-Category 
2861 Tag 
2861 Tag 
2862 Tag 
2862 Category 
2863 Sub-Category 
2883 Category 
2883 Sub-Category 

问题1:我需要找到属性Sub-Category不存在的页面的ID,所以我的结果应该是:

2861 
2862 

问题#2:我需要找到属性Sub-Category和属性Category都不存在的页面ID,所以我的结果应该是:

2861 
+1

问题#“以外的所有与‘子类别’或‘类别’的属性的那些页面ID” 1期望的输出不应该包含2862,因为它包含'Sub-Category' – HaveNoDisplayName

+0

C. orrected data谢谢 –

+0

你的第二个问题输出也应该是2861 2862与第一个问题相同。因为2861既没有,也只有2862只有'分类',但没有'子分类'。 – HaveNoDisplayName

回答

1

1)

select pageid 
from thetable 
where pageid not in (select pageid from thetable where attribute = 'sub-category') 

2)

select pageid 
from thetable 
where pageid not in (select pageid from thetable where attribute = 'sub-category') 
and pageid not in (select pageid from thetable where attribute = 'category') 
+0

我认为第二种解决方案是不正确的,因为它将排除仅具有子类别或类别的记录,因为它们并没有考虑同时查找两个类别和子类别。 –

+0

我确实尝试过它,它的工作原理 - @MurtazaMandvi你能解释为什么你认为AND在这种情况下会像OR一样行事吗?为了让select返回pageid,两者都必须是真实的 –

0

问题1

Select PageID From Table 
Group By PageID 
Having Sum(Case When Attribute = 'Sub-category' Then 1 Else 0 End) = 0 

问题2

Select PageID From Table 
Group By PageID 
Having Sum(Case When Attribute In('Category', 'Sub-category') Then 1 Else 0 End) = 0 
1

的SQL-AS-纯英语的解决方案:

问题#1:我需要找到属性子类别不存在页的ID。换句话说,“以外的所有与‘子类别’的属性的那些页面ID

SELECT PageID FROM MyTable 
EXCEPT 
SELECT PageID FROM MyTable WHERE Attribute = 'Sub-Category' 

问题#2:我需要找到页面ID在属性子类和不存在的属性类别两者。换句话说,

SELECT PageID FROM MyTable 
EXCEPT 
SELECT PageID FROM MyTable WHERE Attribute IN ('Category','Sub-Category')