0

レポートのためにこのビューを取得する必要があります。

取引タイプ金額(£)クレジット商品1(£)商品2(£)商品3(£)
クレジットカード2489.58829.86739.02 920.70
デビットカード2314.931157.47987.34 170.13
小切手/P注文11266.383755.464068.92 3442.00
クレジットカード-Web1974.21984.93 474.21 515.07
総計18045.106727.726269.49 5047.90

現在私はこれを持っています、ほぼそこに...

トランザクションタイプ金額(£)クレジット商品タイプ
銀行振込653.89商品タイプ1
カード1323.24製品タイプ1
現金4538.12製品タイプ1
ダイレクトデビット118.80製品タイプ1
銀行振込653.89商品タイプ2
カード1323.24製品タイプ2
現金4538.12製品タイプ2
ダイレクトデビット118.80商品タイプ2

クエリで何を変更する必要がありますか?

SELECT PT.description          AS [Transaction Type], 
       Sum (P.original_amount) AS [AMOUNT (£) CREDIT], 
       PR.[description]        AS [Product Type] 
FROM   [X].[dbo].[payment] P 
       JOIN [X].[dbo].[table1] PT 
         ON P.payment_id = PT.payment_type_id 
       JOIN [X].[dbo].[table2] SO 
         ON SO.payment_type_id = P.payment_type_id 
       JOIN [X].[dbo].[table3] OI 
         ON OI.order_id = SO.site_order_id 
       JOIN [X].[dbo].[table4] PR 
         ON PR.product_id = OI.product_id 
GROUP  BY PT.description, 
          PR.description 
4

1 に答える 1

2

これは次のことを行う必要があります。

SELECT PT.[DESCRIPTION] as [Transaction Type],
       SUM(P.ORIGINAL_AMOUNT) as [AMOUNT (£) CREDIT],
       SUM( CASE WHEN PR.[Description] = 'Product type 1' 
            THEN P.ORIGINAL_AMOUNT END) [Product 1 (£)],
       SUM( CASE WHEN PR.[Description] = 'Product type 2' 
            THEN P.ORIGINAL_AMOUNT END) [Product 2 (£)],
       SUM( CASE WHEN PR.[Description] = 'Product type 3' 
            THEN P.ORIGINAL_AMOUNT END) [Product 3 (£)]
FROM [X].[dbo].[PAYMENT] P
join [X].[dbo].[TABLE1] PT on P.PAYMENT_ID=PT.PAYMENT_TYPE_ID
join [X].[dbo].[TABLE2] SO on SO.PAYMENT_TYPE_ID=P.PAYMENT_TYPE_ID
join [X].[dbo].[TABLE3] OI on OI.ORDER_ID=SO.SITE_ORDER_ID
join [X].[dbo].[TABLE4] PR on PR.Product_id=OI.PRODUCT_ID
GROUP BY PT.[DESCRIPTION]

UPDATED さて、動的な列数が必要なので、動的SQLが必要になります(njkが言ったように)。PIVOTSQL Server 2005 以降が必要ですが、これを行う 1 つの方法を投稿します。

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

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

SET @Query = '
;WITH CTE AS(
    SELECT PT.[description]        AS [Transaction Type], 
           Sum (P.original_amount) AS [AMOUNT (£) CREDIT], 
           PR.[description]        AS [Product Type] 
    FROM   [X].[dbo].[payment] P 
           JOIN [X].[dbo].[table1] PT 
             ON P.payment_id = PT.payment_type_id 
           JOIN [X].[dbo].[table2] SO 
             ON SO.payment_type_id = P.payment_type_id 
           JOIN [X].[dbo].[table3] OI 
             ON OI.order_id = SO.site_order_id 
           JOIN [X].[dbo].[table4] 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(@Query)
于 2013-02-18T16:25:46.487 に答える