我想将所有行翻转为列。所以如果有以下5列 有3个数据行
@RequestMapping(value = {"/logout"}, method = RequestMethod.GET)
public String logout(HttpServletRequest request, SessionStatus session){
session.setComplete();
request.getSession().invalidate();
return "login";
}
我希望结果集如下所示。所以有3列5行。
仅添加了COL标题(COL1-COL3)以使内容更清晰,我不需要 列标题
ACCT_ID NAME PHONE MOBILE ALTERNATIVE_NAME
01 JOE BROWN 0456-9992-6666 07767828432 ZOE BROWN
02 GILL SHARP 0456-9992-6666 07763928432 BILL SHARP
03 ZAC LOWE 0236-9992-5644 07663925672 LUKE LOWE
我尝试在一列(acct_id)上使用PIVOT
COL1 COL2 COL3
01 02 03
JOE BROWN GILL SHARP ZAC LOWE
0456-9992-6666 0456-9992-6666 0236-9992-5644
07767828432 07763928432 07663925672
ZOE BROWN BILL SHARP LUKE LOWE
返回以下内容
Select *
from
(
select ACCT_ID
from TABLE
)
pivot
(
max(ACCT_ID) as ACCT_ID
for ACCT_ID in ('01','02','03')
)
在正确的轨道上。只需扩展到包括其他4列(NAME,PHONE,MOBILE,ALTERNATIVE_CONTACT),这些列在关联的acct_id下列出。 所以最后有5行。
任何人都可以帮忙。
答案 0 :(得分:0)
您可以使用一系列大小写表达式对其进行暴力破解:
select max(case when acct_id = '01' then acct_id end) as col1,
max(case when acct_id = '02' then acct_id end) as col2,
max(case when acct_id = '03' then acct_id end) as col3
from your_table
union all
select max(case when acct_id = '01' then name end),
max(case when acct_id = '02' then name end),
max(case when acct_id = '03' then name end)
from your_table
union all
select max(case when acct_id = '01' then phone end),
max(case when acct_id = '02' then phone end),
max(case when acct_id = '03' then phone end)
from your_table
... repeat for other columns
COL1 COL2 COL3
-------------- -------------- --------------
01 02 03
JOE BROWN GILL SHARP ZAC LOWE
0456-9992-6666 0456-9992-6666 0236-9992-5644
...
或者您可以取消透视和重新透视,这很麻烦,可能要做的工作超出实际需要:
select col1, col2, col3
from (
select t.*, t.acct_id as col_id
from your_table t
)
unpivot
(
value for heading in (acct_id, name, phone, mobile, alternative_name)
)
pivot
(
max(value) for col_id in ('01' as col1, '02' as col2, '03' as col3)
)
order by case heading when 'ACCT_ID' then 1 when 'NAME' then 2 when 'PHOEN' then 3
when 'MOBILE' then 4 when 'ALTERNATIVE_NAME' then 5 end
COL1 COL2 COL3
-------------- -------------- --------------
01 02 03
JOE BROWN GILL SHARP ZAC LOWE
07767828432 07763928432 07663925672
ZOE BROWN BILL SHARP LUKE LOWE
0456-9992-6666 0456-9992-6666 0236-9992-5644
仅存在用于添加伪col_id
表达式的子查询,因此您可以在acct_id上进行微调,并将其包括在结果中。
如果要在最终结果中包括原始列名作为标题列,请将其添加到第一个选择列表中:
select heading, col1, col2, col3
from (
...
仅当您知道(最多)三行(并且基于固定帐户ID,尽管可以修复)时,此方法才有效;如果您不知道最终结果需要多少列,那么您需要查看动态SQL。