2010-12-30 6 views
1

Ich habe zwei Tabellen alsbeitreten Tabellen und SUM Spalten für jede einzelne Zeile mit einigen Zeilen als Spalte betrachtet werden

tabelle1

id1 | total_amount| final_amount| p_id 
--------------------------------------- 
1 | 500  | 505  | 10 
2 | 700  | 710  | 20 
3 | 400  | 400  | 10 
4 | 450  | 460  | 20 
5 | 300  | 300  | 10 

table2

id2 | month | amount | id1 
------------------------------ 
1  | jan | 300 | 1 
2  | feb | 200 | 1 
3  | jan | 200 | 2 
4  | feb | 500 | 2 
5  | feb | 400 | 3 
6  | jan | 150 | 4 
7  | feb | 300 | 4 
8  | jan | 300 | 5 

er re tatal_amount Spaltenwert Summe (Betrag) von Zustand als id1 während final_amount aus TOTAL_AMOUNT + (einige Dummy-Wert) bekommen

so ergeben sich aus jenen Tisch zu bekommen, wie unten ..

id3 | p_id | jan | feb | total 
------------------------------- 
1 | 10 | 600 | 600 | 1205 
2 | 20 | 350 | 800 | 1170 

hier Wert in jan, feb columns ist die Summe des Betrags in table2, während der Wert in der total column Summe von final_amount in table1 ist und all das ist group by p_id also was ist eine Abfrage für die obige Ausgabe. Wenn Sie bekannt sind, dann antworten Sie bitte ...

+0

ja offensichtlich es pivote Methoden erfordern jedoch etwas mehr erfordern insgesamt durch Summe von final_amount in table1 zu zeigen und alle, ist Gruppe von p_id – Zankar

+0

, wie ich eine Abfrage versucht hatte, als SELECT t1.p_id, sum (FALL WENN t2.month = 'jan' DANN t2.quantity ELSE NULL END) Wie "jan", sum (FALL WENN t2.month = 'feb' DANN t2.quantity ELSE NULL END) AS "feb", Summe (t1.final_amount) als "Gesamt" FROM Tabelle t1 JOIN Tabelle t2 ON t1.id1 = t2.id1 GROUP BY t1.p_id Aber es zeigt falsche Werte an Gesamtspalte – Zankar

Antwort

0

Sie geben RDBMS nicht an.

Die folgenden Arbeiten in SQL Server

WITH table1(id1, total_amount, final_amount, p_id) 
    AS (SELECT 1,500,505,10 UNION ALL 
     SELECT 2,700,710,20 UNION ALL 
     SELECT 3,400,400,10 UNION ALL 
     SELECT 4,450,460,20 UNION ALL 
     SELECT 5,300,300,10), 
    table2(id2, month, amount, id1) 
    AS (SELECT 1,'jan',300,1 UNION ALL 
     SELECT 2,'feb',200,1 UNION ALL 
     SELECT 3,'jan',200,2 UNION ALL 
     SELECT 4,'feb',500,2 UNION ALL 
     SELECT 5,'feb',400,3 UNION ALL 
     SELECT 6,'jan',150,4 UNION ALL 
     SELECT 7,'feb',300,4 UNION ALL 
     SELECT 8,'jan',300,5), 
    t1 
    AS (SELECT p_id,SUM(final_amount) AS total_amount 
     FROM table1 
     GROUP BY p_id), 
    t2 
    AS (SELECT p_id, 
       SUM(CASE WHEN month = 'jan' THEN amount END) AS jan, 
       SUM(CASE WHEN month = 'feb' THEN amount END) AS feb 
     FROM table2 
       JOIN table1 
        ON table1.id1 = table2.id1 
     GROUP BY p_id) 
SELECT Row_number() OVER (ORDER BY (SELECT 0)) AS id3,t1.p_id,jan,feb, 
     total_amount 
FROM t1 
     JOIN t2 
     ON t1.p_id = t2.p_id 
+0

danke Martin wirklich – Zankar

+0

Hallo Martin, ref: Ihre Antwort als Abfrage auf meine Frage in Bezug auf Join-Tabellen und SUM-Spalten für jede einzelne Zeile mit einigen Zeilen werden als Spalte betrachtet. Frage: Diese Abfrage wird nicht in postgresql ausgeführt. Wie es ist, ist jede Syntax für Abfrage in Postgresql ausgeführt werden, wenn YES Antworten auf eine Abfrage. Vielen Dank – Zankar