我的SQL表看起来像:
+----------+-----------+
| ID | Direction |
+----------+-----------+
| 1 | left |
| 1 | null |
| 2 | left |
| 2 | null |
| 3 | null |
| 4 | left |
| 4 | null |
| 5 | null |
+----------+-----------+
我想只显示一次值:
1
和null
的ID为left
,则只显示方向为1
的ID left
。1
仅包含null
值,则显示null
值。答案 0 :(得分:3)
使用公用表表达式(cte):
with cte as
(
Your huge select...
)
select *
from cte t1
where t1.Direction = 'left'
or not exists (select * from cte t2
where t2.kanbanid = t1.kanbanid
and t2.Direction = 'left')
即。如果你的选择有方向'左'对于kanbanid,返回该行。如果相同的kanbanid没有方向,那么也返回该行' left'一点都不。
答案 1 :(得分:1)
为什么不在查询工作之下:
select id,max(dir)
from #temp
group by id
下面是测试数据:
create table #temp
(
id int,
dir char(10)
)
insert into #temp
select 1,'left'
union all
select 1,null
union all
select 2,null
union all
select 3,'right'
union all
select 3,null
union all
select 3,null
select id,max(dir)
from #temp
group by id
聚合函数将忽略null,下面是输出:
答案 2 :(得分:0)
选择不同的*, row_number()over(按ID顺序分区,方向)作为row1进入#any_table 来自#your_table_name
从#any_table中选择* 其中row1 = 1