SQL筛选组上的行

时间:2012-09-19 12:55:32

标签: sql sql-server tsql

我有一个说100行的SQL表。 结构就像

colectiveNo    colectiveName         p1Number        P1EffectiveFromDate   morecol
--------------------------------------------------------------------------------------
1                  name1             somenumber         somedate            NULL
1                  name1             somenumber         somedate            1234
1                  name1             somenumber         somedate            5432

我们分组,由colectiveNo

我想像这样使用条件:

  1. 如果来自“morcol”的组中的行为null 同一组中的行与morcol有一些数字 不要用null显示行 显示第2,3行

  2. ELSE 如果我只有更多行的行,则为null显示该组

  3. colectiveNo    colectiveName         p1Number        P1EffectiveFromDate   morecol
        ----------------------------------------------------------------------------------
        1                name1           somenumber         somedate            NULL
        1                name1           somenumber         somedate            NULL
        1                name1           somenumber         somedate            NULL
    

    显示第1,2,3行

    我很难做到这一点请帮助

1 个答案:

答案 0 :(得分:0)

这是你可以做到的一种方式,你说你在colectiveNo上分组,所以我假设你的第二个例子充满了nulls是一个不同的colectiveNo

SELECT *
FROM
    (
        SELECT   colectiveNo
                ,colectiveName
                ,p1Number
                ,p1EffectiveFromDate
                ,morecol
                ,CASE WHEN MAX(morecol) OVER (PARTITION BY colectiveNo) IS NULL  THEN 1 ELSE 0 END AS fldIncNulls 
        FROM tbltest
    )data
WHERE (morecol IS NOT NULL OR fldIncNulls = 1)