从 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