查询以Normal格式检索结果

时间:2012-07-03 17:45:07

标签: mysql sql database

我怎样才能得到这样的结果?

EX:

id     |  name   |  locid
--------------------------
1      |  IND,UK |   1
       |  USA    |   2
       |  PAK    |   3
2      |  UAE    |   4

1 个答案:

答案 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

我不确定这些是否对你有帮助。至于你的问题的答案,你的问题太模糊了。