【问题标题】:Selective Filter rows based on column Value SQL基于列值 SQL 的选择性过滤行
【发布时间】:2017-05-03 03:10:19
【问题描述】:

我有一个带有 keycolumn 和其他列的表,如下所示。

Keycolumn 是 col1,col2,col3,col4 的组合。 对于给定的键列值,我对 Col5 有不同的值。 如果键列值在 Col5 上有多个值,则考虑除“O”之外的任何值。如果所有状态都是“O”,则考虑“O”。

在上述情况下,我应该得到 4 行。黄色、绿色、蓝色和橙色中的每一行

【问题讨论】:

  • (1) 用您正在使用的数据库标记您的问题。

标签: sql sql-server sql-server-2012


【解决方案1】:

Gordon 的查询有正确的想法,但如果可能,它不符合您关于选择非“O”行的规则。

WITH
CTE
AS
(
    SELECT
        KeyColumn
        ,Col1
        ,Col2
        ,Col3
        ,Col4
        ,Col5
        ,Col6
        ,ROW_NUMBER() OVER (PARTITION BY KeyColumn
            ORDER BY 
                CASE WHEN Col5 = 'O' THEN 1 ELSE 0 END -- put 'O' last
                ,Col5) as rn -- pick first non-O row
                             -- you can choose other column(s) instead of Col5 here
    FROM YourTable
)
SELECT
    KeyColumn
    ,Col1
    ,Col2
    ,Col3
    ,Col4
    ,Col5
    ,Col6
FROM CTE
WHERE rn = 1
;

【讨论】:

    【解决方案2】:

    在大多数数据库中,您将使用 ANSI 标准 row_number() 函数。像这样的:

    select t.*
    from (select t.*,
                 row_number() over (partition by keycolumn order by keycolumn) as seqnum
          from t
         ) t 
    where seqnum = 1;
    

    【讨论】:

    • 行号用于一种排序。但这里不是这样。
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2018-08-24
    • 2021-09-18
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多