请仅阅读现在更相关的“编辑”部分。
我在oracle 12c数据库中有表,例如table_1。
我必须运行一个简单的SQL,该SQL仅返回table_1中的1行和所有列。像
select * from table_1 where col_1 = 65
但是我想要的结果是:
我进行了一些搜索,发现与我想要的this链接非常相似。 但是我只能通过遵循它来获得预期结果的第一列。我无法在预期结果的第二列中获取实际数据。
到目前为止,我只能写:
select v
from (
select 'col_1' as col_1, 'col_2' as col_2, 'col_3' as col_3, 'col_4' as col_4 from dual
) t
unpivot
(
v for val in (col_1,col_2,col_3,col_4)
) u;
如何添加第二列和条件where col_1 = 65
?
编辑:(以上部分现在不那么相关了)
我在this链接上找到了我可以使用的示例,
select * from olympic_medal_tables
desc olympic_medal_tables
Name Null? Type
------------- ----- -----------
NOC VARCHAR2(3)
GOLD_MEDALS NUMBER
SILVER_MEDALS NUMBER
BRONZE_MEDALS NUMBER
下面的SQL提供了我可以使用的功能,但我不希望结果中包含NOC列:
select * from olympic_medal_tables
unpivot (medal_count for medal_colour in (
gold_medals as 'GOLD',
silver_medals as 'SILVER',
bronze_medals as 'BRONZE'
));
所以当我也添加NOC时(这样它就不会作为结果列添加):
select * from olympic_medal_tables
unpivot (medal_count for medal_colour in (
gold_medals as 'GOLD',
silver_medals as 'SILVER',
bronze_medals as 'BRONZE',
noc as 'NOC'
));
我收到错误消息:ORA-01790: expression must have same datatype as corresponding expression
在第6行Error at Line: 44 Column: 3
我也尝试过使用TO_NUMBER和TO_CHAR,但是随后出现各种语法错误。 问题:仅两列如何获得预期结果。这种使用unpivot的方法是否可能?
答案 0 :(得分:1)
这是一个选项,要求您首先选择一行,然后对其应用UNPIVOT
:
SQL> with test (col1, col2, col3, col4) as
2 (select '12', 'hfkds' , 'hk435k' , '32' from dual union
3 select '34', 'ldkfgj', 'fsjd4653', '324' from dual union
4 select '65', 'ifd' , 'dkfjs345', '23' from dual union
5 select '87', 'dg' , '345jh' , '65' from dual
6 ),
7 one_row as
8 (select * From test
9 where col1 = '65'
10 )
11 select *
12 from one_row
13 unpivot (col_value for col_name in
14 (col1 as 'col1', col2 as 'col2', col3 as 'col3', col4 as 'col4'));
COL_ COL_VALU
---- --------
col1 65
col2 ifd
col3 dkfjs345
col4 23
SQL>