0

我有一个包含列的表格 - InvDateCustNameInvAmtPayTypePaidAmt。客户可以通过现金、支票或信用卡 ( PayType) 支付金额。现在基于这张表,我想要这样的东西:

SELECT InvDate, CustName, InvAmt, 
       (PaidAmt as CashPay Where PayType = 'Cash'), 
       (PaidAmt as CheqPay WHERE PayType = 'Cheque'), 
       (PaidAmt As CCPay WHERE PayType = "CC') FROM Invoice
4

2 回答 2

3

您没有指定您正在使用什么 RDBMS,但您应该能够使用聚合函数和任何数据库中的表达式来透视数据:CASE

select invDate, custName, InvAmt,
  sum(case when PayType = 'Cash' then PaidAmt else 0 end) CashPay,
  sum(case when PayType = 'Cheque' then PaidAmt else 0 end) CheqPay,
  sum(case when PayType = 'CC' then PaidAmt else 0 end) CCPay
from Invoice
group by invDate, custName, InvAmt

如果您使用的是带有PIVOT函数的数据库(SQL Server 2005+/Oracle 11g+),那么您可以使用:

select *
from
(
  select invDate, custName, InvAmt,
    PayType, PaidAmt
  from Invoice
) src
pivot
(
  sum(paidamt)
  for paytype in (Cash, Cheque, CC)
) piv

还有一些方法可以通过多次加入您的表来完成,但您需要提供有关表结构的其他详细信息才能正确构造该查询。

于 2013-02-13T23:35:15.987 回答
0

如果您使用的是 SQL Server,您可以编写如下内容:

SELECT InvDate, CustName, InvAmt, 
       CASE WHEN PayType = 'Cash' THEN PaidAmt ELSE 0 END CashPay,
       CASE WHEN PayType = 'Cheque' THEN PaidAmt ELSE 0 END CheqPay,
       CASE WHEN PayType = 'CC' THEN PaidAmt ELSE 0 END CCPay
FROM Invoice
于 2013-02-13T23:35:35.813 回答