如何将列与其他数据汇总?

时间:2018-12-27 09:07:14

标签: sql sql-server

作为我在SP中的联接输出的一部分,就像:

Col1 col2
A     1
B     1
C     2
C     1

我还有另一个表,其中包含Col1 (A,B,C,D,E,F)中的所有可能值[这些值未知,作为最佳实践,我不想对这些值进行硬编码。 ]

SQL的预期输出如下所示

Col1   1            2
A     Yes        No/Null
B     Yes        No
C     Yes        Yes
D      No         No 
E      No         No
F      No         No

感谢我在SQL方面经验相对较少的帮助,如果有人可以帮助我了解如何实现这一目标,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以使用条件聚合进行JOIN

with cte as (
     < query >
)
select c.col1, 
       max(case when t1.col2 = 1 then 'Yes' end),
       max(case when t1.col2 = 2 then 'Yes' end)
from cte c LEFT JOIN
     table t1
     on t1.col1 = c.col1
group by c.col1;

答案 1 :(得分:0)

如果可以使用“ 1/0”代替“是/否”,则可以使用以下SQL pivot query

select
 *
from (
    select 
        letters.col1, mydata.col2
    from (
    select 'A' as col1 union all select 'B' union all select 'C' union all select 'D' union all select 'E' union all select 'F'
    ) letters
    left join (
        select 'A' as col1, 1 as col2 union all
        select 'B' as col1, 1 as col2 union all
        select 'C' as col1, 2 as col2 union all
        select 'C' as col1, 1 as col2
    ) mydata
        on mydata.col1 = letters.col1
) data
PIVOT (
 count( col2 )
 FOR col2
 IN (
  [1],[2]
 )
) PivotTable