2012-11-30 129 views
1

我正在使用以下數據透視表來計算每月的銷售額。使用數據透視表減去列總計SQL Server 2008

mon_pay_amount用於支付金額。我在tbl_orders表中還有一列,其中包含應用的所有折扣,這是mon_order_discount

我需要能夠對每月的折扣進行彙總,並將它們從各自的付款金額中扣除。事後看來,折扣應該已經記錄在支付表中,這可能會讓這更容易!

相當新的PIVOT表和銷售報告,任何人都知道任何好的教程,已通過使用和修改的例子到目前爲止!

數據說明

Table Name  ID    FK     Columns 
--------------------------------------------------------------------- 
tbl_orders  uid_orders       mon_order_discount 
tbl_payment uid_payment  uid_pay_orderid  mon_pay_amount 

數據

Data:   Jan  Feb  March 
Discounts:  10.00 20.00 10.00 
Payments:  200.00 300.00 400.00 

結果

Data:    Jan  Feb  March 
Totals-Discount:  190.00 280.000 390.00 

查詢

SELECT * 
FROM 
    (SELECT 
     DATENAME(month, dte_pay_paydate) mth, 
     mon_pay_amount 
    FROM 
     tbl_payment 
    INNER JOIN 
     dbo.tbl_orders ON (uid_pay_orderid = uid_orders) 
    WHERE 
     bit_pay_paid = 1 
     AND txt_pay_descrip <> 'Credit' 
     AND uid_order_webid = 1 
) x 
PIVOT 
(
    SUM(mon_pay_amount) 
    FOR 
    mth IN ([January], [February], [March], [April], [May], 
      [June], [July], [August], September, [October], 
      [November], [December]) 
) p 

非常感謝

傑森

+0

看來您的問題我s不是使用數據透視表,而是使用嵌套查詢。如果嵌套的子查詢coock你需要的數據,然後樞軸值是正確的。這是? – danihp

+0

你是說在嵌套子查詢中執行減法嗎?這又將結果傳遞給數據透視表。 –

+0

@JasonCongerton你可以發佈一些樣本數據,然後期望的結果? – Taryn

回答

1

可以計算與此類似正確的金額在您的查詢:

SELECT * 
FROM 
(
    SELECT 
     DATENAME(month, p.dte_pay_paydate) mth, 
     p.mon_pay_amount - o.mon_order_discount as Total 
    FROM tbl_payment p 
    INNER JOIN tbl_orders o 
    ON p.uid_pay_orderid = o.uid_orders 
    WHERE bit_pay_paid = 1 
     AND txt_pay_descrip <> 'Credit' 
     AND uid_order_webid = 1 
) x 
PIVOT 
(
    SUM(Total) 
    FOR 
    mth IN ([January], [February], [March], [April], [May], 
      [June], [July], [August], September, [October], 
      [November], [December]) 
) p 

編輯,根據您的意見,我認爲以下可能的工作:

SELECT * 
FROM 
(
    SELECT DATENAME(month, p.dte_pay_paydate) mth, 
     sum(p.mon_pay_amount) - TotalDiscByMonth Total 
    FROM tbl_payment p 
    INNER JOIN tbl_orders o1 
    on p.uid_pay_orderid = o1.uid_orders 
    INNER JOIN 
    (
    select sum(mon_order_discount) TotalDiscByMonth, DATENAME(month, dte_order_stamp) mth 
    from tbl_orders 
    group by DATENAME(month, dte_order_stamp) 
) o2 
    ON DATENAME(month, o1.dte_order_stamp) = o2.mth 
    WHERE bit_pay_paid = 1 
     AND txt_pay_descrip <> 'Credit' 
    group by DATENAME(month, p.dte_pay_paydate), TotalDiscByMonth 
) x 
PIVOT 
(
    SUM(Total) 
    FOR 
    mth IN ([January], [February], [March], [April], [May], 
      [June], [July], [August], September, [October], 
      [November], [December]) 
) p 

請參閱SQL Fiddle with Demo

+0

真奇怪!它沒有出現查詢拉取正確的數據?例如,在6月份沒有取消折扣的情況下,我總共有166,594.92,當我添加' - o.mon_order_discount'時,它告訴我6月現在是39024.47,相差127,570.45這個數字遠遠高到了,而不是接近折扣數額的地方應用? –

+0

@JasonCongerton你可以用你的表格結構和樣本數據創建一個[sql小提琴](http://sqlfiddle.com/#!3/d41d8)嗎?讓查詢正確將會容易得多。 – Taryn

+0

好的,現在就上傳到sql小提琴。哎呀!已被召集會議,將上傳到我的回報小提琴 - 謝謝你到目前爲止的所有幫助! –