2017-08-17 84 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的新手,你能否通过更新现有代码来帮助我,这样我就能理解这个概念。 –