与null无关的联盟

时间:2014-10-09 13:48:48

标签: sql sql-server

我有一个查询,将两个不同的表中的一些选项联合起来

我目前的最终结果如下:

    ColA      ColB    ColC
  -------------------------
1 | NULL      DEF      1
2 | ABC       DEF      1
3 | NULL      GBY      1

B列最多有两个具有相同值的记录。在这种情况下,我只想选择A列没有NULL的记录。

最终结果将是:

    ColA      ColB    ColC
  -------------------------
1 | ABC       DEF      1
2 | NULL      GBY      1

到目前为止,我已经用select选择了原始联盟,我认为我需要某种WHERE,HAVING或GROUP BY。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

也许你可以使用ROW_NUMBER的CTE:

WITH CTE AS
(
  SELECT ColA, ColB, ColC, 
         RN = row_number() over (partition by ColB Order By ColA DESC)
  FROM dbo.TableName -- or your query 
)
SELECT ColA, ColB, ColC
FROM CTE
WHERE RN = 1

Sql-Fiddle

答案 1 :(得分:0)

 IF OBJECT_ID('tempdb..#test') IS NOT NULL
    DROP TABLE #test
CREATE TABLE #test (Col1 char(10), col2 char(10))

INSERT INTO #test(Col1,col2) VALUES 
(NULL,'DEF'),
('ABC','ABC'),
(NULL,'DEF')

select distinct * from #test
where col2 is not null or col1 in (
  select col1 from #test
  group by col1
  having max(col2) is null)

答案 2 :(得分:0)

试试这个:

 select colA, max(colB) as colB, colC
 from table
 group by colA, colC