我怎样才能得到这样的结果?
EX:
id | name | locid
--------------------------
1 | IND,UK | 1
| USA | 2
| PAK | 3
2 | UAE | 4
答案 0 :(得分:3)
根据你给我们的内容,只是你想要的结果集的样本,我几乎无法抗拒建议:
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
我不确定这些是否对你有帮助。至于你的问题的答案,你的问题太模糊了。