2017-08-17 31 views
0

假設我們有一個可以用下面的代碼構建的表。按照特定條件從SQL Server中檢索數據

**SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[ACBilling](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Invoice] [int] NULL, 
    [Product] [varchar](500) NULL, 
    [Rate] [money] NULL, 
    [Quantity] [int] NULL, 
    [Amount] AS ([Rate]*[Quantity]), 
    [CGSTRate] [money] NULL, 
    [CGSTAmount] [money] NULL, 
    [SGSTRate] [money] NULL, 
    [SGSTAmount] [money] NULL, 
    [IGSTRate] [money] NULL, 
    [IGSTAmount] [money] NULL, 
    [TotalTaxAmount] AS (([CGSTAmount]+[SGSTAmount])+[IGSTAmount]) 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO** 

我們已經進入樣本數據到表,現在我的表看起來像 - enter image description here

請考慮以下幾列CGSTRateSGSTRateIGSTRate,這三樣稅(百分比可能將會被強加的金額欄和相關的稅額分別保存在CGSTAmount,SGSTAmountIGSTAmount列中。現在

,請考慮發票欄,你會看到,發票#1包含3個記錄,發票#2包含3條記錄和發票#3包含了3條不同CGSTRateSGSTRateIGSTRates和相關CGSTAmount,SGSTAmount和IGSTAmount

我要執行這樣一個查詢,SQL將會排序由不同的發票號碼,金額列的SUM和在CGSTRateSGSTRateIGSTRate各稅比較的記錄,它應該一起加單獨的列總和CGSTAmount,SGSTAmountIGSTAmount,以便我應該得到以下結果。

enter image description here

有人能幫助我嗎?

+1

請查看此鏈接(https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)以瞭解更多關於如何改進問題 – TheGameiswar

+1

您可以使用條件聚合或透視來做到這一點。有幾十次,如果不是數百次,這個問題已經在互聯網上被提出,並且已經有數千次。 –

回答

0

可能您正在尋找案件。試試這個 -

SELECT [Invoice], 
     SUM([Amount]), 
     SUM(CASE WHEN [CGSTRate] = '6%' THEN [CGSTAmount]) END AS "CGST AMT 6%", 
     SUM(CASE WHEN [CGSTRate] = '9%' THEN [CGSTAmount]) END AS "CGST AMT 9%", 
     SUM(CASE WHEN [CGSTRate] = '12%' THEN [CGSTAmount]) END AS "CGST AMT 12%", 
     SUM(CASE WHEN [SGSTRate] = '6%' THEN [SGSTAmount]) END AS "SGST AMT 6%", 
     SUM(CASE WHEN [SGSTRate] = '9%' THEN [SGSTAmount]) END AS "SGST AMT 9%", 
     SUM(CASE WHEN [SGSTRate] = '12%' THEN [SGSTAmount]) END AS "SGST AMT 12%", 
     SUM(CASE WHEN [IGSTRate] = '12%' THEN [IGSTAmount]) END AS "IGST AMT 12%", 
     SUM(CASE WHEN [IGSTRate] = '24%' THEN [IGSTAmount]) END AS "IGST AMT 24%", 
     SUM(CASE WHEN [IGSTRate] = '28%' THEN [IGSTAmount]) END AS "IGST AMT 28%" 
FROM [dbo].[ACBilling] 
GROUP BY [Invoice]; 

希望這會有所幫助。

+0

我收到以下錯誤 - 消息102,級別15,狀態1,行3 ')'附近的語法不正確。 –

+0

您需要每個Case/When語句的「END」。 –

+0

謝謝,實際上我是SQL的新手,你能否通過更新現有代碼來幫助我,這樣我就能理解這個概念。 –