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