s******n 发帖数: 42 | 1 表一:
type
1
2
3
表二:
type name
1 刘一
1 陈二
2 张三
2 李四
3 王五
3 赵六
表三:
type name
1 刘一
1 陈二
2 张三
2 李四
2 王五
3 赵六
请教两个MySQL问题:
1. 现有表一和表二,怎样得到如下三列结果:
type name name
1 刘一 陈二
2 张三 李四
3 王五 赵六
2. 现有表一和表三,怎样得到如下三列结果:
type name name name
1 刘一 陈二
2 张三 李四 王五
3 赵六
路过大虾请指点 bow~ | s*****n 发帖数: 2174 | 2 CREATE OR REPLACE TEMPORARY TABLE table3 AS
SELECT
type,
name,
ROW_NUMBER () (PARTITION BY type ORDER BY name ASC) AS rn
FROM
table2;
SELECT
table1.type,
MAX(CASE WHEN table3.rn = 1 THEN table3.name ELSE NULL END) AS name1,
MAX(CASE WHEN table3.rn = 2 THEN table3.name ELSE NULL END) AS name2
FROM
table1 LEFT JOIN table3
ON table1.type = table3.type
GROUP BY
table1.type; | s******n 发帖数: 42 | 3 哇,大牛出手相助,拜谢拜谢
问题比我想象的复杂,我以为用点排序和条件语句就可以了
btw, sql有没有方便的方式将行和列调换,就像excel里paste special-transpose那种
效果的?
【在 s*****n 的大作中提到】 : CREATE OR REPLACE TEMPORARY TABLE table3 AS : SELECT : type, : name, : ROW_NUMBER () (PARTITION BY type ORDER BY name ASC) AS rn : FROM : table2; : SELECT : table1.type, : MAX(CASE WHEN table3.rn = 1 THEN table3.name ELSE NULL END) AS name1,
| s******r 发帖数: 1524 | 4 why sql? try transpose
【在 s******n 的大作中提到】 : 哇,大牛出手相助,拜谢拜谢 : 问题比我想象的复杂,我以为用点排序和条件语句就可以了 : btw, sql有没有方便的方式将行和列调换,就像excel里paste special-transpose那种 : 效果的?
| s*****n 发帖数: 2174 | 5 no easy way to do transpose, as far as I know.
Transpose requires rows and columns are interchangeable, but
rows and columns and very different concepts in SQL.
for example, each field in a column must be in the same format, but each
field in a row could be in different format. This difference itself makes
transpose impossible.
Note that Excel doesn't have such restriction, so rows and columns are
virtually equivalent.
【在 s******n 的大作中提到】 : 哇,大牛出手相助,拜谢拜谢 : 问题比我想象的复杂,我以为用点排序和条件语句就可以了 : btw, sql有没有方便的方式将行和列调换,就像excel里paste special-transpose那种 : 效果的?
|
|