我有一个看起来像以下family_expenses表:CASE WHEN 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
如何使输出显示所有列显示结果在单个行中?
预期输出:
bank_code1 amt1 bank_code2 amt2 bank_code3 amt3
LB 130.00 MB 200.00
使用' MAX(CASE ...)'?另外,IMO应该省略这些case语句的ELSE部分(使结果为NULL而不是空格/ 0.00),尽管这取决于你。 – ZLK
我试图使用MAX(CASE ...),并按照您的建议舍弃ELSE,但它仍然返回2行。 – hotseetotsee
嗯,我猜这不是整个查询呢?你会得到多行的唯一原因是,如果你正在分组的东西,导致有多行。例如你不是按银行代码分组的,对吗? – ZLK