SQL 1行两次

时间:2016-01-14 12:42:22

标签: sql

我的SQL表看起来像:

+----------+-----------+
| ID       | Direction | 
+----------+-----------+
| 1        | left      | 
| 1        | null      | 
| 2        | left      | 
| 2        | null      | 
| 3        | null      | 
| 4        | left      | 
| 4        | null      |
| 5        | null      |
+----------+-----------+

我想只显示一次值:

  • 如果标识1null的ID为left,则只显示方向为1的ID left
  • 如果标识1仅包含null值,则显示null值。

enter image description here

3 个答案:

答案 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,下面是输出:

enter image description here

答案 2 :(得分:0)

选择不同的*, row_number()over(按ID顺序分区,方向)作为row1进入#any_table 来自#your_table_name

从#any_table中选择* 其中row1 = 1