2012-09-10 2 views

Répondre

3

Vous pouvez utiliser SUM fonction pour que :

SELECT ID, 
     SUM(CASE Code when 'A' then Value else 0 end)as A, 
     SUM(CASE Code when 'B' then Value else 0 end)as B, 
     SUM(CASE Code when 'C' then Value else 0 end)as C 
FROM myTable 
GROUP BY ID; 

See this SQLFiddle

2

Utilisez PIVOT

select ID,[A],[B],[C] 
from your_table T 
PIVOT (MAX(Value) FOR Code in ([A],[B],[C]))P 


Si le nombre si des codes ne sont pas fixes vous pouvez utiliser pivot dynamique

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Code) 
        from your_table 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT ID, ' + @cols + ' 
       from your_table 
      pivot 
      (
       MAX([Value]) 
       for Code in (' + @cols + ') 
      ) p ' 
print(@query) 
execute(@query) 
1

La réponse est PIVOT

DECLARE @t TABLE (Code varchar(10), Value int, Id int) 

INSERT INTO @t VALUES 
        ('A',100,1), 
        ('A',200,2), 
        ('A',300,3), 
        ('B',200,1), 
        ('B',500,2), 
        ('B',600,3), 
        ('C',800,1), 
        ('C',700,2), 
        ('C',200,3); 

SELECT ID,[A],[B],[C] 
FROM @t 
PIVOT (SUM(Value) FOR Code IN ([A],[B],[C]))P 

Résultat

ID A B C 
1 100 200 800 
2 200 500 700 
3 300 600 200 
Questions connexes