Iは以下のように見えたfamily_expensesテーブルを有する:CASE ROWNUM()戻り行
family_id bank_code amount year month
001 LB 130.00 2017 1
001 MB 200.00 2017 1
001 CB 78.00 2017 2
001 SB 69.00 2017 3
009 LB 78.00 2017 1
テーブルの上にいくつかの他のいくつかの列を有しています。
私がする必要があるのは、ファミリーIDのすべてのレコードを取得し、別のテーブルの別のサブクエリと組み合わせることです。私はCASE WHENを使っていくつかの質問をしました。
私のクエリは以下の通りです:
SELECT
(CASE WHEN t.rownum = 1 THEN t.bank_code ELSE '' END
) as bank_code1,
(CASE WHEN t.rownum = 1 THEN t.amount ELSE 0.00 END
) as amt1,
(CASE WHEN t.rownum = 2 THEN t.bank_code ELSE '' END
) as bank_code2,
(CASE WHEN t.rownum = 2 THEN t.amount ELSE 0.00 END
) as amt2,
(CASE WHEN t.rownum = 3 THEN t.bank_code ELSE '' END
) as bank_code3,
(CASE WHEN t.rownum = 3 THEN t.amount ELSE 0.00 END
) as amt3
FROM
(
select
ROW_NUMBER() OVER(partition by family_id Order by family_id, bank_code)
as rownum,
family_id, bank_code, AMOUNT
from family_expenses
where year = 2017 and month = 1
and family_id= 001
) t
結果表示レコードの2行。
bank_code1 amt1 bank_code2 amt2 bank_code3 amt3
LB 130.00
MB 200.00
出力をすべての列に表示するには、結果を1行で表示できますか?
予想される出力:
bank_code1 amt1 bank_code2 amt2 bank_code3 amt3
LB 130.00 MB 200.00
使用...これ(あなたの元のコードのちょうどおしっこ修正)のようにそれを試してみてくださいMAX(CASE ...) '?また、IMOでは、それらのcase文の 'ELSE'部分を残しておく必要があります(空白スペース/ 0.00の代わりに結果をNULLにする)。これはあなた次第ですが、そうです。 – ZLK
私はMAX(CASE ...)を使用しようとしましたが、あなたが示唆したようにELSEを残しましたが、それでも2行が返されます。 – hotseetotsee
ええと、私はそれは全体のクエリではないと思いますか?そのような複数の行を取得する唯一の理由は、複数の行が存在する原因でグループ化している場合です。例えばあなたは銀行コードでグループ化していないのですか? – ZLK