从 3 个表创建视图
Create view from 3 tables
我有 3 张桌子。
表 1
id info1 info2
1 a b
2 a b
3 a b
4 a b
表 2
id table1_id column_id value
1 1 1 10
2 1 2 20
3 1 3 30
4 2 1 40
5 2 2 50
6 2 3 60
7 3 1 70
8 3 2 80
9 3 3 90
10 4 1 100
11 4 2 110
12 4 3 120
表 3
column_id column
1 column1
2 column2
3 column3
基于以上内容,我需要创建一个视图,按以下方式将行转换为列:
column1 column2 column3
10 20 30
40 50 60
70 80 90
100 110 120
是否可以像上面那样创建视图?
问题的简短回答是肯定的,解决问题的方法可能是连接表然后旋转它们。
我已经写了一些代码作为建议来帮助你,这是未经测试的代码,你需要稍微调整一下
select * from (
select T1.id as Row, T3.column, T2.value
from table1 T1
left join table2 T2 on T2.table1_id = T1.id
left join table3 T3 on T3.column_id = T2.column_id
)
pivot
(
sum(value)
for value in ('column1','column2','column3')
)
group by row
order by row
如果你使用oracle 11g或更高版本,你可以使用下面的你也可以使用pivot。
SELECT max(CASE
WHEN column1 = 'column1'
THEN value1
END) column1
,max(CASE
WHEN column1 = 'column2'
THEN value1
END) column2
,max(CASE
WHEN column1 = 'column3'
THEN value1
END) column3
FROM (
SELECT t2.table1_id
,t3.column1
,to_char(t2.value1) AS value1
FROM table2 t2
JOIN table1 t1 ON t1.id1 = t2.table1_id
JOIN table3 t3 ON t3.column_id = t2.column_id
)
GROUP BY table1_id
我有 3 张桌子。
表 1
id info1 info2
1 a b
2 a b
3 a b
4 a b
表 2
id table1_id column_id value
1 1 1 10
2 1 2 20
3 1 3 30
4 2 1 40
5 2 2 50
6 2 3 60
7 3 1 70
8 3 2 80
9 3 3 90
10 4 1 100
11 4 2 110
12 4 3 120
表 3
column_id column
1 column1
2 column2
3 column3
基于以上内容,我需要创建一个视图,按以下方式将行转换为列:
column1 column2 column3
10 20 30
40 50 60
70 80 90
100 110 120
是否可以像上面那样创建视图?
问题的简短回答是肯定的,解决问题的方法可能是连接表然后旋转它们。
我已经写了一些代码作为建议来帮助你,这是未经测试的代码,你需要稍微调整一下
select * from (
select T1.id as Row, T3.column, T2.value
from table1 T1
left join table2 T2 on T2.table1_id = T1.id
left join table3 T3 on T3.column_id = T2.column_id
)
pivot
(
sum(value)
for value in ('column1','column2','column3')
)
group by row
order by row
如果你使用oracle 11g或更高版本,你可以使用下面的你也可以使用pivot。
SELECT max(CASE
WHEN column1 = 'column1'
THEN value1
END) column1
,max(CASE
WHEN column1 = 'column2'
THEN value1
END) column2
,max(CASE
WHEN column1 = 'column3'
THEN value1
END) column3
FROM (
SELECT t2.table1_id
,t3.column1
,to_char(t2.value1) AS value1
FROM table2 t2
JOIN table1 t1 ON t1.id1 = t2.table1_id
JOIN table3 t3 ON t3.column_id = t2.column_id
)
GROUP BY table1_id