2016-04-21 8 views
-4

Angenommen, Sie Ergebnis gesetzt haben, wie:SQL Summe Gruppe von Datum und id

DATE   ID cost  
--------------------------------------- 
01/01/2011 1  10  
01/01/2011 1  10  
01/01/2011 2  10  
01/01/2011 2  10  

ich einen Weg möchte ich die Werte auf Kosten zu summieren aber nur einmal für jede eindeutige Kennung, so dass, wenn i Gruppe von Datum erhalten ein Ergebnis wie

DATE    ID1cost ID2cost 
01/01/2011   20    20 
+1

[mcve] - [fragen]. – hkf

+2

Tag dbms verwendet, Sie haben bereits eine produktspezifische Antwort. – jarlh

+0

Haben Sie Limit-IDs oder nicht? – qxg

Antwort

1

Verwendung bedingte Aggregation:

SELECT 
    "Date", 
    SUM(CASE WHEN ID = 1 THEN cost ELSE 0 END) AS "ID1Cost", 
    SUM(CASE WHEN ID = 2 THEN cost ELSE 0 END) AS "ID2Cost" 
FROM tbl 
GROUP BY "Date" 
+0

ANSI SQL und fast alle Produkte außer SQL Server haben doppelte Anführungszeichen anstelle von eckigen Klammern, z. '" Date "' anstelle von '[Date]'. – jarlh

+0

@jarlh Cool! Danke, dass du darauf hingewiesen hast. –

+0

Versteh mich nicht falsch, es wurde an OP gerichtet (die dbms nicht kennzeichnete ...), und andere weniger erfahrene SQL-Programmierer. – jarlh

0

SQL Server verschwenken. Hoffe, du willst keinen dynamischen PIVOT.

SELECT Date, [1] AS ID1cost, [2] AS ID2Cost 
FROM 
(
    SELECT * 
    FROM (VALUES ('01/01/2011', 1, 10), ('01/01/2011', 1, 10), ('01/01/2011', 2, 10), ('01/01/2011', 2, 10)) AS T(Date ,ID, Cost) 
) AS T 
PIVOT 
(
    SUM(Cost) 
    FOR ID IN ([1], [2]) 
) AS P