返回一行具有值的行

时间:2017-02-08 16:59:41

标签: sql-server tsql

我的表格如下:

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 

提前致谢。

5 个答案:

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