Sql 如何将一列值拆分为两列而不使用空值?
下面是原始表格的样子Sql 如何将一列值拆分为两列而不使用空值?,sql,postgresql,Sql,Postgresql,下面是原始表格的样子 | Catid| Name | | ---- | ---- | |1 | ramesh| |1 | suresh| |1 | mahesh| |2 | rahul | |2 | rajesh| 我需要你的订单 |catname1 | catname2| | ---- | ---- | |ramesh | rahul | |suresh | rajesh | |mahesh | |
| Catid| Name |
| ---- | ---- |
|1 | ramesh|
|1 | suresh|
|1 | mahesh|
|2 | rahul |
|2 | rajesh|
我需要你的订单
|catname1 | catname2|
| ---- | ---- |
|ramesh | rahul |
|suresh | rajesh |
|mahesh | |
我尝试了下面的查询,但这会产生空值
select (case when s1.catid=1 then s1.name end) as cat1name,
(case when s1.catid=2 then s1.name end) as cat2name
from deemucty.sample12 as s1
既然你没有按名字订购,我就按字母顺序订购了
select min (case catid when 1 then name end) as catname1
,min (case catid when 2 then name end) as catname2
from (select row_number () over (partition by catid order by name) as rn
,catid
,name
from deemucty.sample12
) t
group by rn
order by rn
;
既然你没有按名字订购,我就按字母顺序订购了
select min (case catid when 1 then name end) as catname1
,min (case catid when 2 then name end) as catname2
from (select row_number () over (partition by catid order by name) as rn
,catid
,name
from deemucty.sample12
) t
group by rn
order by rn
;
可以通过在一个catid中的所有名称与另一个catid中的所有名称之间进行完全外部联接来完成此操作:
select t1.name as catname1,
t2.name as catname2
from (
select name, row_number() over (order by name) as rn
from the_table
where catid = 1
) t1
full join (
select name, row_number() over (order by name) as rn
from the_table
where catid = 2
) t2 on t1.rn = t2.rn
示例:您可以通过在一个catid中的所有名称与另一个catid中的所有名称之间进行完全外部联接来完成此操作:
select t1.name as catname1,
t2.name as catname2
from (
select name, row_number() over (order by name) as rn
from the_table
where catid = 1
) t1
full join (
select name, row_number() over (order by name) as rn
from the_table
where catid = 2
) t2 on t1.rn = t2.rn
示例:您使用的是哪种DBMS?@TanjimRahman:问题标记为
postgresql
是Catid
始终是1还是2您使用的是哪种DBMS?@TanjimRahman:问题标记为postgresql
是Catid
始终是1还是2我们可以在行()
@Nikhil,那将毫无意义,因为我们按catid@Abinesh,这回答了你的问题吗?我们可以按catid
本身在row_number()
@Nikhil中订购,因为我们按catid@Abinesh,这回答了你的问题吗?