加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用两列数据转换

发布时间:2020-12-12 16:38:35 所属栏目:MsSql教程 来源:网络整理
导读:我有数据转换格式.看起来像这样: -----------------------------------------| user_id | org | position | lang |-----------------------------------------| 1001 | USE | Boss | EN || 1001 | USD | Bossa | FI || 1002 | GWR | Dim | SV || 1003 | GGA
我有数据转换格式.看起来像这样:
-----------------------------------------
| user_id |  org  |   position  | lang  |
-----------------------------------------
|   1001  |   USE |   Boss      | EN    |
|   1001  |   USD |   Bossa     | FI    |
|   1002  |   GWR |   Dim       | SV    |
|   1003  |   GGA |   DCS       | FI    |
|   1003  |   GCA |   DDD       | SV    |
-----------------------------------------

我想将数据表示为:

-------------------------------------------------------------------------------------
| user_id | org_fi |  position_fi |   org_en | position_en  | org_sv  | position_sv |
-------------------------------------------------------------------------------------
|  1001   |   USD  |    Bossa     |   USE    |   Boss       |         |             |
|  1002   |        |              |          |              | GWR     |  Dim        |
|  1003   |   GGA  |    DCS       |          |              | GCA     |  DDD        |
-------------------------------------------------------------------------------------

我认为需要通过命令连接的数据库查询.

这是我试图做的:

SELECT user_id,org,position,lang,ROW_NUMBER () OVER (PARTITION BY lang,user_id ORDER BY ROWID) rn
 FROM source

但是,我不知道如何前进.

解决方法

这是一种获取所需格式的数据的方法:
SELECT user_id,max(case when lang = 'FI' THEN org ELSE ' ' END) org_fi,max(case when lang = 'FI' THEN position ELSE ' ' END) position_fi,max(case when lang = 'EN' THEN org ELSE ' ' END) org_en,max(case when lang = 'EN' THEN position ELSE ' ' END) position_en,max(case when lang = 'SV' THEN org ELSE ' ' END) org_sv,max(case when lang = 'SV' THEN position ELSE ' ' END) position_sv
FROM source
group by user_id
order by user_id

见SQL Fiddle with Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读