将某些行加入到结果中

时间:2016-11-07 21:56:57

标签: sql sql-server

我尝试进行查询以调用所有匹配col3 = 1并获取组col4 = 123的其余部分,同时将col2作为不同的值。我的表看起来像

ID  col1    col2    col3    col4
---------------------------------
1   A1      A       NULL    123
2   B1      B       NULL    123
3   C1      C       NULL    123
4   D1      D       NULL    123
5   C2      C       1       123
6   D2      D       1       123

并且我正在尝试进行返回ID 1,2,5和6的查询。尝试过联合并加入select * from tbl where col4 = 123 and col3 =1的变体并且它们都排除3,4,5,6或包括商场。

2 个答案:

答案 0 :(得分:2)

select      *


from       (select      *

                       ,row_number () over
                        (
                            partition by    col2
                            order by        case when col3 = 1 then 1 else 2 end
                        ) as rn

            from        t

            where       col4 = 123
            ) t

where       col3 = 1
        or  t.rn = 1
;

答案 1 :(得分:0)

如果我理解正确,您希望col3不是NULL的所有行,然后是其余行,那些具有不同col2值的行:

select t.*
from t
where t.col4 = 123 and
      (t.col3 is not null or
       t.col2 not in (select t.col2 from t t2 where t2.col4 = 123 and t2.col3 is not null)
      )