2016-06-23 2 views
0

Я создаю следующие действия таблицы SQLСумма определенного столбца в SQL Select заявление

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 

, чтобы получить таблицу из двух столбцов с линиями и суммы.

Теперь все, что я хочу, это сумма столбца Amount в дополнительной строке непосредственно под последней строкой.

Я пытался что-то вроде этого, который не работал:

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 

Может кто-нибудь мне помочь, пожалуйста?

+1

Что не получилось? – sagi

+0

это не показывает мне ничего с моим вторым заявлением! – helpling

+1

Возможно 'GROUP BY ROLLUP (Nr);'? – gofr1

ответ

0

Я успешно использовал UNION через два SELECT, чтобы создать то, что, как я думаю, вы запрашиваете, - где он показывает как список значений, так и окончательное суммирование в отдельной строке внизу.

Может быть что-то вроде этого:

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

Только что проверил:

;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 

Выход:

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 
Смежные вопросы