我的表格如下:
DepartmentID DepartmentTierID AllDepartmentTierID
----------------------------------------------------
1 NULL 25
1 26 26
1 NULL 27
2 NULL 28
2 NULL 29
2 30 30
3 NULL 31
3 NULL 32
3 NULL 33
如果特定DepartmentID的任何记录中的DepartmentTierID中有值,我需要返回该部门的所有AlldepartmentTierID。如果特定DepartmentID没有DepartmentTierID,则不应返回AllDepartmentTiersID。 换句话说,DepartmentID 1将返回25,26和27. DepartmentID 2将返回28,29和30而DepartmentID 3将返回任何内容。
结果数据集应如下所示:
AllDepartmentTierID
-------------------
25
26
27
28
29
30
提前致谢。
答案 0 :(得分:1)
您可以使用WHERE EXISTS
:
Select AllDepartmentTierId
From YourTable T1
Where Exists
(
Select *
From YourTable T2
Where T1.DepartmentId = T1.DepartmentId
And T2.DepartmentTierId Is Not Null
)
答案 1 :(得分:1)
您可以使用EXISTS
:
SELECT A.AllDepartmentTierID
FROM dbo.YourTable A
WHERE EXISTS(SELECT 1 FROM dbo.YourTable
WHERE DepartmentID = A.DepartmentID
AND DepartmentTierID IS NOT NULL);
答案 2 :(得分:0)
一种方法是使用窗口功能:
select
AllDepartmentTierID
from (
select
AllDepartmentTierID,
max(DepartmentTierID) over (partition by DepartmentID) x
from t
) t where x is not null;
答案 3 :(得分:0)
这是使用Count() Over()
窗口聚合函数的一种方法。
Select * from
(
select *,count(DepartmentTierID) over(partition by DepartmentID) as cnt from yourtable
) A
Where cnt >= 1
工作原理
Count
聚合不会计算NULL
值,所以当count大于1时,意味着DepartmentID
至少有一个不为空DepartmentTierID
答案 4 :(得分:0)
你会想做这样的事情。请检查,这未经过测试。
选择AllDepartmentTierID
从部门
在哪里DepartmentID IN(
SELECT DepartmentID
来自部门d
在哪里d.DepartmentTierID<> NULL)