sql - 通过选择查询将一列拆分为两列

标签 sql postgresql

我有一张 table ......

 +-----+-------------+--------+
 |  ID | EarningName |  Type  |
 +-----+-------------+--------+
 | 101 | ravi        |  R     |
 | 103 | sadham      |  D     |
 | 103 | sadham      |  D     |
 | 102 | rahul       |  D     |
 | 101 | rakhav      |  R     |
 | 101 | nithin      |  R     |
 | 103 | sumesh      |  D     | 
 | 101 | joil        |  R     |
 | 101 | manu        |  R     |
 | 102 | mubi        |  R     |
 | 103 | pradeep     |  D     |
 | 102 | sree        |  R     |
 | 102 | sajeev      |  R     |
 | 102 | ansu        |  R     |
 | 101 | prasad      |  D     |
 | 103 | milin       |  R     |
 | 103 | abhilash    |  R     |
 | 102 |    praveen  |  D     |
 | 103 | kiran       |  R     |
 +-----+-------------+--------+

I want a postgresql select Query that produce following output (join based on id and split based on type. The output must get like the following structure).

+-----+-------------+--------------+
|  ID | EarningName |  DeductName  |
+-----+-------------+--------------+
| 101 | ravi        |   prasad     |
| 101 | rakhav      |   sumesh     |
| 101 | joil        |              |
| 101 | manu        |              |
| 102 | mubi        |   rahul      |
| 102 | sree        |   praveen    |
| 102 | sajeev      |              |
| 102 | ansu        |              | 
| 103 | milin       |   nithin     |
| 103 | abhilash    |   pradeep    |
| 103 | kiran       |   sadham     |
| 103 |             |   rajesh     |
+-----+-------------+--------------+

  I wrote some queries using LEFT JOIN ,But i didn't get like the above structure ..   

最佳答案

这比我最初想象的要棘手。您试图在两列中获取两个列表,但它们似乎是无序的。解决方案仍然是条件聚合,但是现在您需要一个列来枚举值以及 id:

select id,
       max(case when Type = 'R' then name end) as EarningName,
       max(case when Type = 'D' then name end) as DeductName
from (select t.*,
             row_number() over (partition by id, type order by id) as seqnum
      from atablelike t
     ) t
group by id, seqnum;

关于sql - 通过选择查询将一列拆分为两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707972/

相关文章:

Django psql 全文搜索不匹配未词干的词

arrays - 在 PostgreSQL 中创建包含标量列和数组列的多列索引

mysql - SQL - 理解 'JOIN' 语法、顺序

java - Hibernate @Formula 注释不起作用

sql - Entity Framework : One to Many relationship

具有多个where/条件的mysql select语句

postgresql - 整数 UP 到 10 的倍数

python - 将参数列表作为输入传递给 SQL 查询

django - Postgres 数组

ruby-on-rails - Rails 4 事件记录数组查询