我怎样才能得到这样的结果?
前任:
id | name | locid
--------------------------
1 | IND,UK | 1
| USA | 2
| PAK | 3
2 | UAE | 4
有了你给我们的继续,只是所需结果集的一个样本,我几乎无法抗拒建议:
SELECT '1' AS `id`, 'IND,UK' AS `name`, '1' AS locid
UNION ALL SELECT '', 'USA', '2'
UNION ALL SELECT '', 'PAK', '3'
UNION ALL SELECT '2', 'UAE', '4'
好吧,事实证明我最终还是忍不住提出了建议。
但我很确定这并不能回答你提出的问题。
我只是在这里猜测您的表结构。但鉴于:
CREATE TABLE mytable (id INT, locid INT, `name` VARCHAR(3));
INSERT INTO mytable VALUES (1,1,'IND'),(1,1,'UK'),(1,2,'USA'),(1,3,'PAK'),(2,4,'UAE');
该语句将返回指定的结果集:
SELECT IF(u.id_break=1,u.id,'') AS id
, u.name
, u.locid
FROM ( SELECT IF(t.id = @last_id,0,1) AS id_break
, @last_id := t.id AS id
, t.locid
, t.name
FROM ( SELECT s.id, s.locid, GROUP_CONCAT(s.name) AS `name`
FROM mytable s
GROUP BY s.id, s.locid
ORDER BY s.id, s.locid
) t
JOIN (SELECT @last_id := NULL) i
ORDER BY t.id, t.locid
) u
我只是在这里猜测标记列中的“缺失”值id
并没有真正缺失,但它被抑制了,有点像报告中的控制中断。
我会注意到我提供的 SQL 语句不是规范模式,因为查询的结果集可以用作另一个查询的行集,“摆脱”每行上重复值的想法与关系模型。
通常,这种类型的操作(将重复值转换为“控制中断”或“标题”)通常在报表创建层处理,而不是在拉取结果集的 SQL 中处理。
如果我们不需要消除后续行中重复的 id 值,则查询要简单得多:
SELECT t.id
, t.locid
, t.name
FROM ( SELECT s.id, s.locid, GROUP_CONCAT(s.name) AS `name`
FROM mytable s
GROUP BY s.id, s.locid
ORDER BY s.id, s.locid
) t
ORDER BY t.id, t.locid
我不确定这是否对您有帮助。就您的问题而言,您的问题太模糊了。