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,这回答了你的问题吗?