Sql 获取特定的表

Sql 获取特定的表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在使用SQL server 2008,并使用以下函数构建了一个表: SELECT COD1 + COD2 + COD3 AS CODFINAL, SUM(CASE WHEN SIG1 = 'BCO' THEN 1 ELSE 0 END) AS A1, SUM(CASE WHEN SIG1 = 'RIP' THEN 1 ELSE 0 END) AS B1, SUM(CASE WHEN SIG1 = 'MIN'

我正在使用SQL server 2008,并使用以下函数构建了一个表:

    SELECT COD1 + COD2 + COD3 AS CODFINAL,
           SUM(CASE WHEN SIG1  =  'BCO' THEN 1 ELSE 0 END) AS A1,
           SUM(CASE WHEN SIG1   = 'RIP' THEN 1 ELSE 0 END) AS B1,
           SUM(CASE WHEN SIG1   = 'MIN' THEN 1 ELSE 0 END) AS B1,
           SUM(CASE WHEN SIG1   = 'MAD' THEN 1 ELSE 0 END) AS B1,
           SUM(CASE WHEN SIG1   = 'CPR' THEN 1 ELSE 0 END) AS PC1,
           SUM(CASE WHEN SIG1   = 'MAR' THEN 1 ELSE 0 END) AS B1,
           SUM(CASE WHEN SIG1   = 'LAC' THEN 1 ELSE 0 END) AS CLu
FROM DBO.DATABASE 
我得到了这样的结果:

CODFINAL   A1   B1  B1    B1   PC1   B1   CLu 
B12030     1    1   1      1     1    2    3
C12130     1    1   1      1     1    2    3
D12230     1    1   1      1     1    2    3
E12230     1    1   1      1     1    2    3
CODFINAL   A1   B1  PC1  CLu    
B12030     1    5    1    3
C12130     1    5    1    3
D12230     1    5    1    3
E12230     1    5    1    3
但我希望有一个具有唯一总值的表,如下所示:

CODFINAL   A1   B1  B1    B1   PC1   B1   CLu 
B12030     1    1   1      1     1    2    3
C12130     1    1   1      1     1    2    3
D12230     1    1   1      1     1    2    3
E12230     1    1   1      1     1    2    3
CODFINAL   A1   B1  PC1  CLu    
B12030     1    5    1    3
C12130     1    5    1    3
D12230     1    5    1    3
E12230     1    5    1    3
您可以使用:


可能是这样的吗

WITH MyCodes
(
SELECT COD1 + COD2 + COD3 AS CODFINAL,
           SUM(CASE WHEN SIG1  =  'BCO' THEN 1 ELSE 0 END) AS A1,
           SUM(CASE WHEN SIG1   = 'RIP' THEN 1 ELSE 0 END) AS B1a,
           SUM(CASE WHEN SIG1   = 'MIN' THEN 1 ELSE 0 END) AS B1b,
           SUM(CASE WHEN SIG1   = 'MAD' THEN 1 ELSE 0 END) AS B1c,
           SUM(CASE WHEN SIG1   = 'CPR' THEN 1 ELSE 0 END) AS PC1,
           SUM(CASE WHEN SIG1   = 'MAR' THEN 1 ELSE 0 END) AS B1d,
           SUM(CASE WHEN SIG1   = 'LAC' THEN 1 ELSE 0 END) AS CLu
FROM DBO.DATABASE 
)
SELECT CODFINAL,A1,B1a+B1b+B1c+B1d AS B1, PC1,CLu FROM MyCodes

那么您希望将行连接成单个字符串?为什么有这么多名为
B1
的列?如果您想在case语句中包含多个值,可以将其重写为B1,就像
SUM一样(当SIG1在('RIP'、'MIN'、'MAD'、'MAR')中时,则将其重写为B1