2010-12-16 101 views
2

可能是一個非常簡單的答案,但我是T-SQL的新手,所以可以藉助一些幫助!SQL查詢計算同一行上的兩個數量

我需要一個工作了TotInc第3列 - (減號)TOTEX給我一個TotalDisposableIncome

這裏是我的SQL:

- 這使我在同一總收入和總支出排

SELECT 
    SUM(CASE WHEN Type = '1' THEN Amount ELSE 0 END) as TotalInc, 
    SUM(CASE WHEN Type = '2' THEN Amount ELSE 0 END) as TotEx 
    FROM ClaimFinancials 

謝謝!

回答

4

你可以使用一個公用表表達式(CTE):

WITH T1 AS 
(
    SELECT 
     SUM(CASE WHEN Type = '1' THEN Amount ELSE 0 END) as TotalInc, 
     SUM(CASE WHEN Type = '2' THEN Amount ELSE 0 END) as TotEx 
    FROM ClaimFinancials 
) 
SELECT TotalInc, TotEx, TotalInc - TotEx AS TotalDisposableIncome 
FROM T1 

還是普通的子查詢:

SELECT TotalInc, TotEx, TotalInc - TotEx AS TotalDisposableIncome 
FROM 
(
    SELECT 
     SUM(CASE WHEN Type = '1' THEN Amount ELSE 0 END) as TotalInc, 
     SUM(CASE WHEN Type = '2' THEN Amount ELSE 0 END) as TotEx 
    FROM ClaimFinancials 
) T1 
+0

完美!謝謝! – James 2010-12-16 23:26:49

4

您不能在SELECT子句中的其他地方引用列別名。這是一個選擇。

SELECT TotalInc, TotEx, TotInc - TotEx as TotalDisposable 
FROM (
    SELECT 
    SUM(CASE WHEN Type = '1' THEN Amount ELSE 0 END) as TotalInc, 
    SUM(CASE WHEN Type = '2' THEN Amount ELSE 0 END) as TotEx 
    FROM ClaimFinancials 
    ) AS Total 
+0

這也有訣竅(將TotInc更改爲TotalInc後)謝謝 – James 2010-12-16 23:28:39

0
SELECT 
    SUM(CASE WHEN Type = '1' THEN Amount ELSE 0 END) as TotalInc, 
    SUM(CASE WHEN Type = '2' THEN Amount ELSE 0 END) as TotEx, 
    SUM(CASE 
    WHEN Type = '1' THEN Amount 
    WHEN Type = '2' Then -Amount 
    ELSE 0 
    END) AS TotalDisposableIncome 
FROM ClaimFinancials 
0

不止一種方法去做一件事。

WITH T1 AS 
( 
    SELECT 
    Type,  
    SUM(Amount as Total 
    FROM ClaimFinancials 
) 
SELECT 
    Inc.Total as TotalInc, 
    Ex.Total as TotEx, 
    Inc.Total - Ex.Total AS TotalDisposableIncome 
FROM T1 Inc, T2 Ex 
where T1.Type = 1 and T2.Type = 2