SQL:选择条件查询

时间:2017-03-09 06:03:30

标签: sql sql-server

我有一张包含以下数据的表格:

enter image description here

从那张桌子我想得到如下输出:

enter image description here

实际要求是将Entity IsDefaultIsOwner显示为"Y" Entity

如果没有包含该条件的数据,则选择IsDefault下一个条件"Y"Entity

如果否,则选择IsOwner"Y"Entity

如果没有值"Y"的{​​{1}},则Entity将不会显示。

每个Entity至少显示一次。

我尝试使用以下查询:

  

SELECT ENTITY_ID,IS_DEFAULT,IS_OWNER FROM #TEMP_CHART WHERE(IS_DEFAULT ='Y'或IS_OWNER ='Y')

但两次显示相同Entity次:

enter image description here

是否有任何选择查询以获得上述输出

3 个答案:

答案 0 :(得分:2)

您可以使用rank()窗口函数来获取所需数据:

select *
from (
    select t.*,
        rank() over (
            partition by entity order by isDefault desc,
                IsOwner desc
            ) rn
    from your_table t
    where isDefault = 'Y'
        or IsOwner = 'Y'
    ) t
where rn = 1

窗口函数的排序在这里非常重要。

Demo

答案 1 :(得分:1)

您可以根据DENSE_RANKIsDefault列按IsOwner排名。

<强>查询

;with cte as(
    select [rn] = dense_rank() over(
        partition by [Entity]
        order by 
          case [IsDefault] when 'Y' then 1
          else 2 end,
          case [IsOwner] when 'Y' then 1
          else 2 end
    ), * 
    from [your_table_name]
)
select [Entity], [IsDefault], [IsOwner]  from cte
where [rn] = 1;

<强> Find demo here

答案 2 :(得分:-1)

enter image description here

尝试执行上面的代码..你会得到结果..