在SQL中水平拼接列

时间:2017-06-21 20:54:47

标签: mysql sql

我有一个具有以下结构的表:

CREATE TABLE `slide_style_info` (
  `ssi_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `slide_style_id` int(11) DEFAULT NULL,
  `input_type` varchar(64) DEFAULT NULL,
  `input_name` varchar(64) DEFAULT NULL,
  `default_value` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`ssi_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1

和值:

1   |1  |Text               |Text 1         |First text here
2   |1  |Text               |Text 2         |Second text here
3   |2  |Text               |Text 1         |First text here
4   |1  |Text               |Text 3         |Third text here
5   |1  |Font Family        |Font Family 1  |Comic Sans
6   |1  |Font Family        |Font Family 2  |Comic Sans
7   |1  |Font Family        |Font Family 3  |Comic Sans
8   |2  |Font Family        |Font Family 1  |Comic Sans

我想选择slide_style_id = 1所有的行,但显示结果的格式为:

1   |1  |Text               |Text 1         |First text here      |Font Family      |Font Family 1  |Comic Sans
2   |1  |Text               |Text 2         |Second text here     |Font Family      |Font Family 2  |Comic Sans
4   |1  |Text               |Text 3         |Third text here      |Font Family      |Font Family 1  |Comic Sans

可以用sql完成吗?

我希望使用的解决方案可以使用:

SELECT `input_type`, `input_name`
FROM `scene_style_info`
WHERE `scene_style_id` = 1
AND `input_type` = "Text"
ORDER BY `input_name`

SELECT `input_type`, `input_name`
FROM `scene_style_info`
WHERE `scene_style_id` = 1
AND `input_type` = "Font Family"
ORDER BY `input_name`

现在我以正确的顺序拥有了我需要的值,但我不知道有任何方法可以水平地拼接这些列。

1 个答案:

答案 0 :(得分:0)

这不是一个真正的解决方案,只是观察

我认为您的请求只能部分地来自您提供的事实。

它看起来像你可以关联这一行

ssi_id | slide_style_id | input_type | input_name | default_value 
3      |2                |Text       |Text 1      |First text here

到此行,因为他们共享常见的slide_style_id值为2

ssi_id | slide_style_id | input_type | input_name    | default_value 
8      |2               |Font Family  Font Family 1  |Comic Sans

,结果将是一行,类似于问题

中包含的那一行

但使用相同的逻辑,这三行中的每一行:

ssi_id | slide_style_id | input_type | input_name | default_value 
1      |1               |Text        |Text 1      |First text here
2      |1               |Text        |Text 2      |Second text here
4      |1               |Text        |Text 3      |Third text here

将涉及这3行中的每一行

ssi_id | slide_style_id | input_type | input_name    | default_value 
5      |1               |Font Family |Font Family 1  |Comic Sans
6      |1               |Font Family |Font Family 2  |Comic Sans
7      |1               |Font Family |Font Family 3  |Comic Sans

,结果将是3x3 = 9行

我的观点是,您还没有为我们提供使用SQL生成所需结果的任何逻辑方法。