姓名 | 日期 | 语文 | 数学 | 英语 |
---|---|---|---|---|
小明 | 2022-01-01 | 1 | 2 | 3 |
小明 | 2022-01-02 | 4 | 5 | 6 |
小红 | 2022-01-01 | 11 | 22 | 33 |
小红 | 2022-01-02 | 44 | 55 | 66 |
姓名 | 日期 | 学科 | 分数 |
---|---|---|---|
小明 | 2022-01-01 | 语文 | 1 |
小明 | 2022-01-01 | 数学 | 2 |
小明 | 2022-01-01 | 英语 | 3 |
小明 | 2022-01-02 | 语文 | 4 |
小明 | 2022-01-02 | 数学 | 5 |
小明 | 2022-01-02 | 英语 | 6 |
小红 | 2022-01-01 | 语文 | 11 |
小红 | 2022-01-01 | 数学 | 22 |
小红 | 2022-01-01 | 英语 | 33 |
小红 | 2022-01-02 | 语文 | 44 |
小红 | 2022-01-02 | 数学 | 55 |
小红 | 2022-01-02 | 英语 | 66 |
自己想了半天,不知道用 PG 写出 SQL 是什么样的,请各位有经验的大佬们指点一下,
哪怕是回答一个 PG 用的函数,在此谢过
1
fuyufjh 2022-03-23 19:44:55 +08:00
写个 select 然后 union all 起来
|
2
fuyufjh 2022-03-23 19:45:29 +08:00
更正:写 3 个 select 然后 union all 起来
|
3
0x0208v0 OP @fuyufjh
``` select 姓名, 日期, "学科", 数学 from table1 union select 姓名, 日期, "学科", 语文 from table1 union select 姓名, 日期, "学科", 英语 from table1 ``` 不会要这么写吧,确实能实现 :doge: |
4
zbinlin 2022-03-23 20:24:08 +08:00
|
5
moen 2022-03-23 20:28:14 +08:00
SELECT "姓名", "日期",
unnest(ARRAY['语文', '数学', '英语']) AS "学科", unnest(ARRAY["语文", "数学", "英语"]) AS "分数" FROM LATERAL (VALUES ('小明', '2022-01-01'::date, 1, 2, 3), ('小明', '2022-01-02'::date, 4, 5, 6), ('小红', '2022-01-01'::date, 11, 22, 33), ('小红', '2022-01-02'::date, 44, 55, 76)) scores("姓名", "日期", "语文", "数学", "英语") ORDER BY 1, 2 |
6
isir1234 2022-03-23 23:07:37 +08:00
create extension hstore;
SELECT 姓名, 日期, (x).key, (x).value FROM (SELECT 姓名, 日期, each(hstore(分数表) - ARRAY ['姓名', '日期']) as x FROM 分数表) tmp; |