【问题标题】:SQL: Select Query with ConditionsSQL:选择有条件的查询
【发布时间】:2017-03-09 06:03:30
【问题描述】:

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

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

实际要求是将EntityIsDefaultIsOwner 显示为"Y"

如果没有符合该条件的数据,则下一个条件是选择Entity with IsDefault is "Y"

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

如果没有Entity 的值为"Y",则不会显示Entity

每个Entity 至少显示一次。

我尝试了以下查询:

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

但显示相同的Entity 两次如下:

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

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以根据需要使用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

    【讨论】:

      【解决方案2】:

      您可以根据IsDefaultIsOwner 列按DENSE_RANK 给出排名。

      查询

      ;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

      【讨论】:

        【解决方案3】:

        enter image description here

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

        【讨论】:

        • 如果您可以将答案以文本格式直接放在 SO 页面上,则应避免链接到答案。
        猜你喜欢
        • 2022-08-07
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 2022-09-27
        相关资源
        最近更新 更多