我有一张包含以下数据的表格:
从那张桌子我想得到如下输出:
实际要求是将Entity
IsDefault
和IsOwner
显示为"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
次:
是否有任何选择查询以获得上述输出
答案 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
窗口函数的排序在这里非常重要。
答案 1 :(得分:1)
您可以根据DENSE_RANK
和IsDefault
列按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)
尝试执行上面的代码..你会得到结果..