sql >> Database teknologi >  >> RDS >> Sqlserver

sql:værdier af rækker som kolonner

Dit problem kan løses ved hjælp af Dynamic Pivoting. Se venligst denne artikel

Prøv dette

DECLARE @t TABLE(Id_Contract INT, Dt DATETIME,Amount INT)
INSERT INTO @t SELECT 1,'2012-01-01 00:00:00.000',500
INSERT INTO @t SELECT 1,'2012-03-01 00:00:00.000',450
INSERT INTO @t SELECT 2,'2012-09-01 00:00:00.000',300
INSERT INTO @t SELECT 3,'2012-08-01 00:00:00.000',750

DECLARE @cols AS VARCHAR(MAX), @query  AS VARCHAR(MAX);

SELECT 
    Id_Contract
    , LEFT(DATENAME(month,Dt),3) + ' ' + DATENAME(Year,Dt) AS Month_Year_Name
    ,Amount
INTO #Temp
FROM @t 
WHERE Dt BETWEEN  '01/01/2012' AND '03/31/2012'

SELECT  @cols = STUFF(( SELECT DISTINCT 
                               '],[' +   t2.Month_Year_Name
                        FROM    #Temp AS t2
                        ORDER BY '],[' + t2.Month_Year_Name
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'

SET @query = 'SELECT Id_Contract, ' + @cols + ' FROM 
            (
                SELECT
                     Id_Contract
                    , Amount
                    , Month_Year_Name
                FROM #Temp
           ) x
            PIVOT 
            (
                 MAX(amount)
                 FOR Month_Year_Name in (' + @cols + ')
            ) p '
EXECUTE(@query)
DROP TABLE #Temp

// Resultat

Id_Contract Jan 2012    Mar 2012
1           500         450

Rediger

For dine testdata,

DECLARE @t TABLE(Id_Contract INT, Dt DATETIME,Amount INT) 
INSERT INTO @t SELECT 1,'2012-01-01 00:00:00.000',500 
INSERT INTO @t SELECT 1,'2012-03-01 00:00:00.000',450 
INSERT INTO @t SELECT 2,'2012-03-01 00:00:00.000',450 
INSERT INTO @t SELECT 3,'2012-08-01 00:00:00.000',750 

outputtet er

Id_Contract Jan 2012    Mar 2012
1              500          450
2              NULL         450

Lad mig vide, om det opfylder kravet.



  1. SSIS:Hvordan genbruger du script i en scripting-komponent i en anden pakke?

  2. Er der en måde at overvinde DSRA9010E 'setReadOnly' er ikke understøttet på WebSphere undtagelsen?

  3. Postgresql-forespørgsel mellem datointervaller

  4. Tilføj en ny tabelkolonne til specifik ordensposition i Microsoft SQL Server