【问题标题】:SQL pivot datewise amount for receipts based on receipt type基于收据类型的收据的 SQL 透视按日期金额
【发布时间】:2015-05-13 05:49:31
【问题描述】:

我正在寻求帮助来创建数据透视表,它将根据收据类型显示收据的日期金额。

样本数据:

receipt_no  Receipt receipt_date    receipt_amount
0115D171073-CA  Cash Receipt    04/01/2015  338.00
0115D171074-CC  CreditCard Receipt  04/01/2015  185.00
0115D171075-CC  CreditCard Receipt  04/01/2015  187.00
0115D171076-CA  Cash Receipt    04/01/2015  250.00
0115D171077-CA  Cash Receipt    04/01/2015  25.00
0115D171078-CA  Cash Receipt    04/01/2015  6.50
0115D171079-CA  Cash Receipt    04/01/2015  35.00
0115D171080-CA  Cash Receipt    04/01/2015  210.00
0115D171081-CA  Cash Receipt    04/01/2015  25.00
0115D171082-CC  CreditCard Receipt  04/01/2015  209.00
0115D171083-CC  CreditCard Receipt  04/01/2015  280.00
0115D171084-CC  CreditCard Receipt  04/01/2015  25.00
0115D171085-CH  Cheque Receipt  27/12/2014  365.60
0115D171086-CH  Cheque Receipt  27/12/2014  365.60
0115D171087-CC  CreditCard Receipt  04/01/2015  372.50

预期结果

Date      cash receipt       creditcard receipt      cheque receipt
27/12/2015     xxxxx.xx       xxxxx.xx               xxxx.xx
04/01/2015     xxxxx.xx       xxxxx.xx               xxxx.xx

SQL 查询

SELECT * FROM(
SELECT 
CASE
WHEN receipt_no like '%CA%' THEN 'Cash Receipt'
WHEN receipt_no like '%CC%' THEN 'CreditCard Receipt'
WHEN receipt_no like '%CH%' THEN 'Cheque Receipt'
END AS Receipt, receipt_date, receipt_amount
FROM rpt_receipt_hdr
) Receipt
PIVOT
(
    SUM(receipt_amount)
    FOR receipt_date in (receipt_date)
)PIV

请帮我创建日期明智的支点

【问题讨论】:

    标签: sql-server sql-server-2008 pivot


    【解决方案1】:

    你不需要PIVOT,一个简单的GROUP BYCASE 也可以。像这样的。

    SELECT 
    receipt_date,
    SUM(CASE WHEN receipt_no like '%CA%' THEN receipt_amount END) [Cash Receipt],
    SUM(CASE WHEN receipt_no like '%CC%' THEN receipt_amount END) [CreditCard Receipt],
    SUM(CASE WHEN receipt_no like '%CH%' THEN receipt_amount END)  [Cheque Receipt]
    FROM rpt_receipt_hdr
    GROUP BY receipt_date
    

    【讨论】:

      【解决方案2】:

      我想通了..

      SELECT * FROM(
      SELECT 
      CASE
      WHEN receipt_no like '%CA%' THEN 'Cash Receipt'
      WHEN receipt_no like '%CC%' THEN 'CreditCard Receipt'
      WHEN receipt_no like '%CH%' THEN 'Cheque Receipt'
      END AS [Receipt], receipt_date, receipt_amount
      FROM rpt_receipt_hdr
      ) Receipt
      PIVOT
      (
          SUM(receipt_amount)
          FOR [Receipt] in ([Cash Receipt],[CreditCard Receipt],[Cheque Receipt])
      )PIV
      

      这很好用……

      【讨论】:

      • 您可以在不使用PIVOT 和仅使用GROUP BY 的情况下实现相同的目的。检查我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多