2016-06-23 8 views
0

Ich schaffe folgende SQL-TabelleSumme einer bestimmten Spalte in SQL-Select-Statement

SELECT Nr, nu_betrag_wert AS Amount 
FROM 
    (SELECT DISTINCT 
     processid, nu_betrag_wert, Nr 
    FROM NU_WERTE 
    WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag 

die eine Tabelle mit zwei Spalten mit den Linien und den Betrag zu erhalten.

Jetzt will ich nur die Summe der Spalte Amount in einer zusätzlichen Zeile direkt unter der letzten Zeile.

habe ich versucht, so etwas, was nicht funktioniert hat:

SELECT 
    Nr, SUM(nu_betrag_wert) AS Zahlbetrag 
FROM 
    (SELECT DISTINCT 
     processid, nu_betrag_wert, Nr 
    FROM NU_WERTE 
    WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag 
GROUP BY 
    Nr WITH ROLLUP 

Kann mir jemand bitte helfen?

+1

Was hat nicht funktioniert? – sagi

+0

zeigt es mir nichts mit meiner zweiten Aussage! – helpling

+1

Vielleicht 'GROUP BY ROLLUP (Nr);'? – gofr1

Antwort

0

Ich habe erfolgreich UNION über zwei SELECTs verwendet, um zu produzieren, was ich denke, Sie fordern - wo es sowohl die Liste der Werte und die endgültige Summierung in einer separaten Zeile am unteren Rand zeigt.

Vielleicht so etwas wie folgt aus:

CREATE TABLE #nu_werte (processid INT IDENTITY, nu_betrag_wert int, nr VARCHAR(10)) 

INSERT INTO #nu_werte (nr, nu_betrag_wert) 
SELECT 'Gut', 1 UNION 
SELECT '(Nr)', 3 UNION 
SELECT 'Gut', 5 UNION 
SELECT 'Tag', 6 UNION 
SELECT 'Tag', 8 

WITH nu_betrag (processid, nu_betrag_wert, nr) 
AS 
(
    SELECT 
    processid, 
    nu_betrag_wert, 
    nr 
    FROM 
    #nu_werte 
    WHERE 
    nr != '(Nr)' AND 
    nu_betrag_wert IS NOT NULL 
) 

SELECT nr, nu_betrag_wert AS amount 
FROM 
    nu_betrag 
UNION 
SELECT 
    NULL, SUM(nu_betrag_wert) AS amount 
FROM 
    nu_betrag 
0

habe gerade überprüft:

;WITH NU_WERTE AS (
SELECT DISTINCT * 
FROM (VALUES 
(1,10,'(N0)'),(2,20,'(N0)'),(3,30,'(N0)'),(4,40,'(N0)'),(5,60,'(N0)'), 
(6,11,'(N1)'),(7,22,'(N1)'),(8,33,'(N1)'),(9,44,'(N1)'),(10,NULL,'(N1)'), 
(11,NULL,'(N1)'),(12,20,'(Nr)'),(13,10,'(Nr)') 
) as t (processid, nu_betrag_wert, Nr) 
) 

SELECT Nr, nu_betrag_wert AS Amount 
FROM 
    (SELECT DISTINCT 
     processid, nu_betrag_wert, Nr 
    FROM NU_WERTE 
    WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag 
UNION ALL 
SELECT 
    Nr, SUM(nu_betrag_wert) AS Zahlbetrag 
FROM 
    (SELECT DISTINCT 
     processid, nu_betrag_wert, Nr 
    FROM NU_WERTE 
    WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag 
GROUP BY 
    Nr WITH ROLLUP 

Ausgang:

Nr  Amount 
(N0) 10 
(N0) 20 
(N0) 30 
(N0) 40 
(N0) 60 
(N1) 11 
(N1) 22 
(N1) 33 
(N1) 44 
(N0) 160 
(N1) 110 
NULL 270 
Verwandte Themen