SQL:带条件的选择查询

标签 sql sql-server

我有一个表格,其中的数据如下:

enter image description here

从该表中我想得到如下输出:

enter image description here

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

如果没有符合该条件的数据,则下一个条件是选择 Entity,其中 IsDefault“Y”

如果不是,则选择 Entity,其中 IsOwner“Y”

如果没有值为“Y”实体,则不会显示该实体

每个实体至少显示一次。

我尝试使用以下查询:

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

但显示相同的实体两次,如下所示:

enter image description here

是否有任何选择查询来获取以上输出

最佳答案

您可以使用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

关于SQL:带条件的选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42687896/

相关文章:

c# - 如何根据其代表的 SQL Server 列名称填充复选框 ID

mysql - 如果更新了MYSQL中的值,则其他值发生变化

sql - SQL Server 2008密码以分号结尾

mysql - SQL 仅选择列上具有最大值的行

SQL递归查询

mysql - 如何获取一行中的某一数据

sql-server - 偶尔出现死锁

sql-server - 使用存储过程启动 SQL Server 报告

mysql - 如果存在更新否则插入查询不起作用 mysql phpmyadmin

sql - 确定哪个应用程序正在更改 sql 数据库值