Sql server 当ca时,获取两行而不是一行
例如:Sql server 当ca时,获取两行而不是一行,sql-server,case-when,Sql Server,Case When,例如: --table for illustration-- create table #temp (dd int, typeId int, cl smallint) insert into #temp (dd, typeId, cl) values (1,681,75) insert into #temp (dd, typeId, cl) values (1,815,75) insert into #temp (dd, typeId, cl) values (2,681,75) insert
--table for illustration--
create table #temp (dd int, typeId int, cl smallint)
insert into #temp (dd, typeId, cl)
values (1,681,75)
insert into #temp (dd, typeId, cl)
values (1,815,75)
insert into #temp (dd, typeId, cl)
values (2,681,75)
insert into #temp (dd, typeId, cl)
values (2,815,75)
insert into #temp (dd, typeId, cl)
values (3,681,75)
insert into #temp (dd, typeId, cl)
values (3,681,100)
insert into #temp (dd, typeId, cl)
values (4,681,75)
我正在寻找的查询应该带有唯一的dd(第一列)
结果是
dd BDFlagStatus ODFlagStatus
1 NULL TRUE
1 TRUE NULL
2 NULL TRUE
2 TRUE NULL
3 TRUE NULL
4 TRUE NULL
我在找
dd BDFlagStatus ODFlagStatus
1 TRUE TRUE
2 TRUE TRUE
3 TRUE NULL
4 TRUE NULL
尝试:
试试这个。
演示
selectdistinct
的功能非常有限,但是使用MAX()等聚合函数的groupby
可以做很多事情more@VipulJhunjhunwalaJhunjunwala如果答案有效,将其标记为已接受是一个好习惯:)
dd BDFlagStatus ODFlagStatus
1 TRUE TRUE
2 TRUE TRUE
3 TRUE NULL
4 TRUE NULL
;with cte
as
(
select distinct dd, case when typeId = 681 then 'True'
end as BDFlagStatus,
case when typeId = 815 then 'True'
end as ODFlagStatus
from temp
)
select dd,max(BDFlagStatus),Max(ODFlagStatus)
from cte group by dd
SELECT dd
,MAX(CASE
WHEN typeId = 681
THEN 'True'
END) AS BDFlagStatus
,MAX(CASE
WHEN typeId = 815
THEN 'True'
END) AS ODFlagStatus
FROM #temp
group by dd