我需要帮助将rowns合并到sql中的列:
表:
| 1 |单向| client1 |
| 1 |单向| client2 |
| 2 |代理| client1 |
| 2 |代理| proxy1 |
| 2 |代理| client2 |
输出:
| 1 |单向| client1 | NULL | client2 |
| 2 |代理| client1 |代理| client2 |
答案 0 :(得分:0)
Oof,你在细节方面有点啰嗦,所以不要期待这个答案在没有一些调整的情况下工作。让我给你一些样本数据:
Name, Class, Score
john, math, 70
james, math, 75
john, english, 48
james, english, 69
期望的输出:
name, mathscore, englishscore
john, 70, 48
james, 75, 69
透视mysql的查询(不支持PIVOT命令)
SELECT
name,
MAX(CASE WHEN class = 'math' THEN score END) as mathscore
MAX(CASE WHEN class = 'english' THEN score END) as englishscore
FROM
grades
GROUP BY
name
如果您想了解它的工作原理,请在没有GROUP BY且没有MAX函数的情况下运行它:
SELECT
name,
CASE WHEN class = 'math' THEN score END as mathscore
CASE WHEN class = 'english' THEN score END as englishscore
FROM
grades
然后请记住,MAX()在执行其工作时不会考虑空值,因此会导致行折叠为仅包含值的行
顺便一提 - 看看我在提供样本数据和期望输出方面如何表达我的答案?请写下你的下一个SQL问题,包括你试过的SQL
编辑:
好的,所以只需将我的SQL中的模式应用到您的名字中即可。对我来说,"名称"是固定列,"类"是一个被转移到多个列。一般模式是:
SELECT
fixedColumn1,
fixedColumn2
..
fixedColumnN,
MAX(CASE WHEN column_with_values_that_must_be_headers = a1_value_you_want_in_its_own_column THEN column_with_value_to_appear_as_data1) as column_header_name1,
MAX(CASE WHEN column_with_values_that_must_be_headers = a2_value_you_want_in_its_own_column THEN column_with_value_to_appear_as_data2) as column_header_name2,
...
MAX(CASE WHEN column_with_values_that_must_be_headers = aN_value_you_want_in_its_own_column THEN column_with_value_to_appear_as_dataN) as column_header_nameN
FROM
table
GROUP BY
fixedColumn1,
fixedColumn2
..
fixedColumnN,
这是部分的;最后完成它 - 你会更多地学习这种技术,而不仅仅是等待有人给你答案粘贴:)
SELECT
TopologyType,
TopologyName,
MAX(CASE WHEN name = 'client1' THEN name END) AS client1,
... --put more CASE WHENs here
FROM
table
GROUP BY
TopologyType,
TopologyName
您的查询与我之前的示例之间唯一的细微差别是,我有一个列,我想成为标题(类的名称;英语/数学),但另一列是数据(测试分数为你是否有效地希望名称作为列标题和数据。没关系 - 只需按照上面的模式,使用名称列作为标题和数据:
MAX(CASE WHEN name = 'client1' THEN name END) AS client1,
^^^^^^^^^^^^^^^^ ^^^^
column_header cell_data
答案 1 :(得分:0)
如果您不需要所有输出字段都在列中,则可以使用GROUP_CONCAT
示例查询
SELECT `t`.`TopologyType`,`t`.`TopologyName`,GROUP_CONCAT(DISTINCT(`tt`.`Name`)) as `name` from `test` `t`
left join `test` `tt`
ON `t`.`TopologyType`=`tt`.`TopologyType`
GROUP BY `t`.`TopologyName`;
<强>输出强>
TopologyType TopologyName name
1 oneway client1,client2
2 proxy client1,proxy1,client2
中查看此示例