这是在采访中向我提出的问题:
输入:
SQL> select col1,col2 from Hakuna_matata;
COL1 ~ COL2
--------------------------------------------------~
A ~ 2
B ~ 1
C ~ 3
我希望输出为
COL1 ~ COL2
--------------------------------------------------~---
A ~ 1
B ~ 2
C ~ 3
您将如何使用SQL?
请帮助我查询/如何做到这一点。
答案 0 :(得分:3)
您可以通过单独提升两个列进行排序,然后使用@Kaushik Nayak Tip在评论中使用with clauses,rownum
编辑进行合并
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;
但面试官可能希望你提出有关排序意味着什么的问题,而不是简单地提出一个做出假设的解决方案。