我有一个包含列的表格 - InvDate
,CustName
,InvAmt
,PayType
和PaidAmt
。客户可以通过现金,支票或信用卡(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
答案 0 :(得分: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
还有一些方法可以通过多次连接表来完成,但是您需要提供有关表结构的其他详细信息才能正确构建该查询。
答案 1 :(得分: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