2017-01-06 79 views
-4

我正在使用Microsoft Sql Server管理工作室。SQL查詢SUM()和GROUP BY表中的2列

我爲創建特定類型發票的稅務報表而混雜成功。

我有低於6%的金額,其他金額低於13.5%,最後金額有6%和13.5%的完整總額。

我在結果中得到了我的答案,但顯示了每個發票的兩個不同的行。一個是6%的值,另一個是13.5%的值。

我需要以某種方式將這兩行合併到每個發票的單一行中。

我的SQL查詢如下:

SELECT tran_no , 
     tran_date , 
     (SELECT SUM(edetail_amt) 
      WHERE  edetail_taxid = '6008U_=' 
     ) AS '6% amt' , 
     (SELECT SUM(edetail_per) 
      WHERE  edetail_taxid = '6008U_=' 
     ) AS '6% vat' , 
     (SELECT SUM(edetail_amt) 
      WHERE  edetail_taxid = '6008U_>' 
     ) AS '13.5% amt' , 
     (SELECT SUM(edetail_per) 
      WHERE  edetail_taxid = '6008U_>' 
     ) AS '13.5% vat' , 
     (SELECT SUM(edetail_amt + edetail_per) 
      WHERE  edetail_taxid IN ('6008U_=', '6008U_>') 
     ) AS 'Net Total' 
FROM h_edetail 
     INNER JOIN h_tran ON edetail_tranid = tran_kid 
WHERE tran_trantype = 'PI' 
     AND tran_date = '2016-11-03 00:00:00.000' 
GROUP BY tran_no , 
     tran_date , 
     edetail_taxid 
ORDER BY tran_no; 

與結果一起查詢的截圖如下:

Query and results

+2

發佈查詢文本 –

+0

選擇tran_no,tran_date,(SELECT SUM(edetail_amt),其中edetail_taxid = '6008U_ =')作爲 'AMT 6%', (SELECT SUM( 'select sum(edetail_per)where edetail_taxid ='6008U_ =')as'6%vat', (select sum(edetail_amt)where edetail_taxid ='6008U_>')as '13.5%amt', (select sum(edetail_per)where edetail_taxid =' ('6008U _ =','6008U_>'))中的edetail_taxid作爲'Net Total' from h_edetail內部連接h_tran on edetail_tranid = tran_kid在'13.5%vat', (select sum(edetail_amt + edetail_per)其中tran_trantype ='PI'和 tran_date ='2016-11-03 00:00:00.000'組by tran_no,tran_date,edetail_ta xid order by tran_no – Adnan

+1

查詢中沒有任何內容被稱爲「發票」,所以問題完全不清楚。這就是爲什麼樣本數據和預期結果如此重要。 –

回答

0

如果我沒看錯你正在尋找這個

SELECT tran_no, 
     tran_date, 
     Sum(case when edetail_taxid = '6008U_=' then edetail_amt else 0 end) AS '6% amt', 
     Sum(case when edetail_taxid = '6008U_=' then edetail_per else 0 end) AS '6% vat', 
     Sum(case when edetail_taxid = '6008U_>' then edetail_amt else 0 end) AS '13.5% amt', 
     Sum(case when edetail_taxid = '6008U_>' then edetail_per else 0 end) AS '13.5% vat', 
     Sum(case when edetail_taxid IN ('6008U_=', '6008U_>') then edetail_amt + edetail_per else 0 end) AS 'Net Total' 
FROM h_edetail 
     INNER JOIN h_tran 
       ON edetail_tranid = tran_kid 
WHERE tran_trantype = 'PI' 
     AND tran_date = '2016-11-03 00:00:00.000' 
GROUP BY tran_no, 
      tran_date 
ORDER BY tran_no 

因爲select sum(edetail_amt) where edetail_taxid='6008U_='你被迫添加edetail_taxidgroup by這是重複記錄的原因。你可以通過添加caseSUM

+0

謝謝你sooooooo很多..... – Adnan

+0

其解決......... – Adnan

+0

@Adnan,那麼爲什麼不把答案標記爲正確? – jonlink