Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带总计的透视sql_Sql_Sql Server_Pivot - Fatal编程技术网

带总计的透视sql

带总计的透视sql,sql,sql-server,pivot,Sql,Sql Server,Pivot,现在我有一个问题要问我这个 Transaction Type Product 1 (£) Product 2 (£) Product 3 (£) Credit Card 1 739.02 920.70 Debit Card 3 987.34 170.13 Cheques / P Orders 7 4068.92 3442.00 Credit Card - Web 1 474.21 515.07 但现在我需要最后一行的总数 GRAND TOTAL

现在我有一个问题要问我这个

Transaction Type    Product 1 (£)   Product 2 (£)   Product 3 (£)


Credit Card 1   739.02  920.70
Debit Card  3   987.34  170.13
Cheques / P Orders  7   4068.92 3442.00
Credit Card - Web   1   474.21  515.07
但现在我需要最后一行的总数

GRAND TOTAL 12  6269.49 5047.90
无法将汇总与我的pivot sql一起使用?你知道我能用什么来得到最后一行吗

DECLARE @ProductTypes AS NVARCHAR(MAX), @Query1  AS NVARCHAR(MAX);

SELECT @ProductTypes = STUFF((SELECT DISTINCT ',' + QUOTENAME([Description]) 
                              FROM [X].[dbo].[PRODUCT] 
                              FOR XML PATH(''), 
                              TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')


SET @Query1 = '

;WITH CTE AS
(

    SELECT PT.[description]       AS [Transaction Type], 
           Sum (P.original_amount) AS [AMOUNT (£) CREDIT], 
           PR.[description]        AS [Product Type] 
    FROM    [X].[dbo].[Table1] P
join [X].[dbo].[Table2] PT on P.PAYMENT_ID=PT.PAYMENT_TYPE_ID
join [X].[dbo].[Table3] SO on SO.PAYMENT_TYPE_ID=P.PAYMENT_TYPE_ID
join [X].[dbo].[Table4] OI on OI.ORDER_ID=SO.SITE_ORDER_ID
join [C].[dbo].Table5] PR on PR.Product_id=OI.PRODUCT_ID
group by PT.DESCRIPTION, PR.DESCRIPTION
)
SELECT *
FROM CTE AS T
PIVOT(SUM([AMOUNT (£) CREDIT]) FOR [Product Type] IN ('+@ProductTypes+')) AS PT
'


EXEC(@Query1)
您可以使用来获得想要的结果,只需稍微修改代码即可

您的代码与此类似:

DECLARE @ProductTypes AS NVARCHAR(MAX), 
    @ProductTypesSum AS NVARCHAR(MAX),
    @Query1  AS NVARCHAR(MAX);

SELECT @ProductTypes = STUFF((SELECT DISTINCT ',' + QUOTENAME([Description]) 
                              FROM [X].[dbo].[PRODUCT] 
                              FOR XML PATH(''), 
                              TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SELECT @ProductTypesSum = STUFF((SELECT DISTINCT ', Sum(' + QUOTENAME([Description])+') as '+QUOTENAME([Description])
                              FROM [X].[dbo].[PRODUCT] 
                              FOR XML PATH(''), 
                              TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')


SET @Query1 = '

;WITH CTE AS
(
    SELECT PT.[description]       AS [Transaction Type], 
           Sum (P.original_amount) AS [AMOUNT (£) CREDIT], 
           PR.[description]        AS [Product Type] 
    FROM    [X].[dbo].[Table1] P
    join [X].[dbo].[Table2] PT on P.PAYMENT_ID=PT.PAYMENT_TYPE_ID
    join [X].[dbo].[Table3] SO on SO.PAYMENT_TYPE_ID=P.PAYMENT_TYPE_ID
    join [X].[dbo].[Table4] OI on OI.ORDER_ID=SO.SITE_ORDER_ID
    join [C].[dbo].Table5] PR on PR.Product_id=OI.PRODUCT_ID
    group by PT.DESCRIPTION, PR.DESCRIPTION
)
SELECT 
    case 
        when [Transaction Type] is not null 
        then [Transaction Type] 
        else ''Grand Total'' end as [Transaction Type],
    '+@ProductTypesSum+'
FROM CTE AS T
PIVOT
(
    SUM([AMOUNT (£) CREDIT]) 
    FOR [Product Type] IN ('+@ProductTypes+')
) AS PT
group by [Transaction Type] with rollup'


EXEC(@Query1)
请参见修改后的代码。

您可以使用来获得所需的结果,只需稍微修改代码即可

您的代码与此类似:

DECLARE @ProductTypes AS NVARCHAR(MAX), 
    @ProductTypesSum AS NVARCHAR(MAX),
    @Query1  AS NVARCHAR(MAX);

SELECT @ProductTypes = STUFF((SELECT DISTINCT ',' + QUOTENAME([Description]) 
                              FROM [X].[dbo].[PRODUCT] 
                              FOR XML PATH(''), 
                              TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SELECT @ProductTypesSum = STUFF((SELECT DISTINCT ', Sum(' + QUOTENAME([Description])+') as '+QUOTENAME([Description])
                              FROM [X].[dbo].[PRODUCT] 
                              FOR XML PATH(''), 
                              TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')


SET @Query1 = '

;WITH CTE AS
(
    SELECT PT.[description]       AS [Transaction Type], 
           Sum (P.original_amount) AS [AMOUNT (£) CREDIT], 
           PR.[description]        AS [Product Type] 
    FROM    [X].[dbo].[Table1] P
    join [X].[dbo].[Table2] PT on P.PAYMENT_ID=PT.PAYMENT_TYPE_ID
    join [X].[dbo].[Table3] SO on SO.PAYMENT_TYPE_ID=P.PAYMENT_TYPE_ID
    join [X].[dbo].[Table4] OI on OI.ORDER_ID=SO.SITE_ORDER_ID
    join [C].[dbo].Table5] PR on PR.Product_id=OI.PRODUCT_ID
    group by PT.DESCRIPTION, PR.DESCRIPTION
)
SELECT 
    case 
        when [Transaction Type] is not null 
        then [Transaction Type] 
        else ''Grand Total'' end as [Transaction Type],
    '+@ProductTypesSum+'
FROM CTE AS T
PIVOT
(
    SUM([AMOUNT (£) CREDIT]) 
    FOR [Product Type] IN ('+@ProductTypes+')
) AS PT
group by [Transaction Type] with rollup'


EXEC(@Query1)

请参见修改后的代码。

您可以动态透视透视透视列中的所有值

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)

select @cols = (SELECT string_agg ( QUOTENAME(PivotColumnName) ,',')

                   From   
                    (
                      select distinct(PivotColumnName)
                      from yourtable
                    )
                        )

 set @query = N'SELECT * from 
         (
            select value, PivotColumnName
            from yourtable
        ) x
        pivot 
        (
            max(value)
            for PivotColumnName in (' + @cols + N')
        ) p '

            exec sp_executesql @query;

可以为透视列中的所有值动态透视

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)

select @cols = (SELECT string_agg ( QUOTENAME(PivotColumnName) ,',')

                   From   
                    (
                      select distinct(PivotColumnName)
                      from yourtable
                    )
                        )

 set @query = N'SELECT * from 
         (
            select value, PivotColumnName
            from yourtable
        ) x
        pivot 
        (
            max(value)
            for PivotColumnName in (' + @cols + N')
        ) p '

            exec sp_executesql @query;

尝试了汇总,但不起作用尝试了汇总,但不起作用可怕的逻辑和思维。站起来鞠躬!令人敬畏的逻辑和思维。站起来鞠躬!