2011-07-29 19 views
0

金額的總和我有我的表DATAS如下SQL查詢來得到一個基於TaxType代碼

EmpID FedTaxID TaxTypeCode Amount 
1059 888888888 TX02  2000 
1059 888888888 TX02  3000 
1059 888888888 TX03  5010 
我使用 self join獲得基於 FedTaxID and TaxTypeCode總量

。我寫如下

SELECT SUM(t1.Amount) AS Expr1, SUM(t2.Amount) AS Expr2 FROM tblTest AS t1 CROSS JOIN tblTest AS t2 WHERE (t1.FedTaxID = '888888888') AND (t2.FedTaxID = '888888888') AND (t1.TaxTypeCode = 'tx02') AND (t2.TaxTypeCode = 'tx03')

但如下返回量

Expr1  Expr2 
5000 10020 

我的預期輸出是

Expr1  Expr2 
    5000  5010 

所以任何一個可以告訴我哪裏錯了,請。此外,我需要那些2的總和所以任何一個可以幫助我太

+1

你真的需要在列輸出?您不能僅僅通過TaxTypeCode選擇TaxTypeCode,tblTest中的FedTaxID ='88888888'和TaxTypeCode中的總和(金額),並在客戶端解釋它? – forsvarir

+0

'@ forsvair'這個工程很好,我需要那些總數如何才能 – Dotnet

回答

2

好得多使用「CASE」語句這樣的事情:

SELECT FedTaxId, SUM(tx02t) as tx02_tot , SUM(tx03t) as tx03tot , SUM(Txallt) as txnntot 
    FROM (SELECT CASE WHEN TaxTypeCode = 'tx02' THEN Amount else 0 END as tx02t, 
       CASE WHEN TaxTypeCode = 'tx03' THEN Amount else 0 END as tx03t, 
       Amount as txallt 
     FROM tbltest 
     WHERE FedTaxID = '888888888' 
     ) 
GROUP BY FedTaxId 
+1

我不明白你爲什麼要在FedTaxId的團隊結束時...這似乎有點多餘。 – forsvarir

+0

嗨'詹姆斯'我需要總數也意味着'5000 + 5010 = 10010' – Dotnet

+0

Dorababu - 請參閱編輯。 @forsvarir是正確的 - 但我假設他的現實生活問題涉及稅收代碼或員工的某種分組。 –

0

你加起來值的兩倍,所以expr1 = 2000 + 3000 = 5000

但EXPR你還增加了兩倍,因此5010 + 5010 = 10020

Tjeu

+0

我該怎麼做才能得到我想要的輸出 – Dotnet

+0

我不確定它爲什麼這樣做。 有什麼結果,如果你嘗試 SELECT SUM(t1.Amount)AS表達式1,SUM(t2.Amount)AS EXPR2 FROM TBLTEST爲T1 CROSS JOIN TBLTEST爲T2 WHERE((t1.FedTaxID = '888888888') AND(t1。((t2.FedTaxID ='888888888')AND(t2.TaxTypeCode ='tx03')) – Tjekkles

+0

對不起,似乎無法獲得格式正確的評論= s – Tjekkles

0

你的交叉連接導致兩行數據返回,尋找類似下面

2000 5010 
3000 5010 

所以,如果你總結了那些你得到你所看到的結果。

我相信這不是最好的方式,但子查詢將工作。

1

我沒有一個方便的SQL實例來檢查我的語法,但你也許可以做到這一點使用PIVOT:

Select ['TX02'], ['TX03'] 
FROM 
(
    Select TaxTypeCode, Sum(Amount) as Total 
    From tblTest 
    Group By TaxTypeCode 
) as SourceTable 
PIVOT 
(
Sum(Total) 
FOR TaxTypeCode IN (['TX02'], ['TX03']) 
) AS PivotTable 

UPDATE: 隨着FedTaxID(再次,與一粒鹽,我沒有辦法檢查現在這個右):

Select ['TX02'], ['TX03'] 
FROM 
(
    Select FedTaxID, TaxTypeCode, Sum(Amount) as Total 
    From tblTest 
    Group By FedTaxID, TaxTypeCode 
) as SourceTable 
PIVOT 
(
Sum(Total) 
FOR TaxTypeCode IN (['TX02'], ['TX03']) 
) AS PivotTable 
+0

我的情況如何,然後我也用'FedTaxID' – Dotnet

1

只是做一個簡單的GROUP BY和使用WITH ROLLUP的總數:

SELECT 
    TaxTypeCode, SUM(Amount) 
FROM 
    tblTest 
WHERE 
    FedTaxID = '888888888' 
    AND TaxTypeCode IN ('TX02', 'TX03') 
GROUP BY 
    TaxTypeCode WITH ROLLUP 

應該給你的輸出是這樣的:

TaxTypeCode (No column name) 
    TX02   5000 
    TX03   5010 
    NULL   10010    -- this is the line with the totals 
+0

嗨,這給出了預期的結果,但我的情況'FedTaxID' – Dotnet

+0

好吧,但會根據我需要的這個搜索,因爲我應該增加稅額時TaxTypeCode = tx02'和TaxTypeCode = tx03'但根據您的聲明,這將添加不考慮'TaxTypeCode'如果我沒有錯誤 – Dotnet

+0

'@ Marc_s'好的感謝您的幫助 – Dotnet