0

InvDateCustNameInvAmtPayType、およびの列を持つテーブルがあります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
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 に答える