sql >> Database >  >> RDS >> Sqlserver

sql:waarden van rijen als kolommen

Uw probleem kan worden opgelost met behulp van Dynamic Pivoting. Kijk eens naar deze artikel

Probeer dit

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

// Resultaat

Id_Contract Jan 2012    Mar 2012
1           500         450

Bewerken

Voor uw testgegevens,

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 

de uitvoer is

Id_Contract Jan 2012    Mar 2012
1              500          450
2              NULL         450

Laat me weten of het voldoet aan de vereiste.



  1. Sla meerdere afbeeldingen op in mysql php van Android, maar er wordt slechts één afbeelding ingevoegd

  2. Huidige verbindingen in MySQL Workbench bekijken met behulp van de GUI

  3. Is het goed om altijd de join-clausule in Oracle te gebruiken?

  4. ArrayList<> doorgeven als IN-clausule in SQL-query in MySQL