我正在处理一个与以下内容非常类似的查询:
CREATE TABLE #test (a char(1), b char(1))
INSERT INTO #test(a,b) VALUES
('A',NULL),
('A','B'),
('B',NULL),
('B',NULL)
SELECT DISTINCT a,b FROM #test
DROP TABLE #test
Run Code Online (Sandbox Code Playgroud)
结果是,毫不奇怪,
a b
-------
A NULL
A B
B NULL
Run Code Online (Sandbox Code Playgroud)
我希望实际看到的输出是:
a b
-------
A B
B NULL
Run Code Online (Sandbox Code Playgroud)
也就是说,如果列在某些记录中有值但在其他记录中没有,我想抛出该列为NULL的行.但是,如果列的所有记录都具有NULL值,我想保留该NULL.
在单个查询中执行此操作的最简单/最优雅的方法是什么?
我觉得如果我在周五下午没有筋疲力尽,这将很简单.
Mos*_*cho 15
试试这个:
select distinct * from test
where b is not null or a in (
select a from test
group by a
having max(b) is null)
Run Code Online (Sandbox Code Playgroud)
你可以在这里得到小提琴.
请注意,如果您只能包含一个非空值b,则可以简化为:
select a, max(b) from test
group by a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40005 次 |
| 最近记录: |