SQL_Question在采访中问道

时间:2018-03-11 07:51:09

标签: sql oracle

这是在采访中向我提出的问题:

输入:

SQL> select col1,col2 from Hakuna_matata;

COL1                      ~             COL2
--------------------------------------------------~
A                         ~             2
B                         ~             1
C                         ~             3

我希望输出为

COL1                      ~             COL2
--------------------------------------------------~---
A                         ~             1
B                         ~             2
C                         ~             3

您将如何使用SQL?

请帮助我查询/如何做到这一点。

5 个答案:

答案 0 :(得分:3)

您可以通过单独提升两个列进行排序,然后使用@Kaushik Nayak Tip在评论中使用with clausesrownum 编辑进行合并

with a as 
(select rownum as r,a1.* from (select col1, col3 from Hakuna_matata order by col1 asc ) a1)
, b as 
(select rownum as r,a2.* from (select col2  from Hakuna_matata order by col2 asc ) a2)
select a.col1, b.col2, a.col3 from a ,b where a.r=b.r;

col3是添加更多列以选择

的示例

答案 1 :(得分:1)

由于没有解释如何生成DEF/GHI/GKL DEF/MNO/PQR DEF/STU/VWX (例如交换值或只是重新编号),我会选择:

col2

产生所需的输出 - 但不清楚这是否是所需的解决方案

答案 2 :(得分:0)

适合在您的情况下使用ascii功能:

SQL> select col1, ( ascii(col1) - 64 ) col2 from Hakuna_matata;

答案 3 :(得分:0)

也许有另一种方式,但我认为你必须更新表数据:

update Hakuna_matata set col2=1 where col1='A';
update Hakuna_matata set col2=2 where col1='B';

答案 4 :(得分:0)

有趣。所有其他答案似乎都很复杂。我愿意:

select col1, row_number() over (order by col1) as seqnum
from Hakuna_matata
order by col1;

但面试官可能希望你提出有关排序意味着什么的问题,而不是简单地提出一个做出假设的解决方案。