1

嗨,我有这种情况

我的桌子

 create table foo(
    id int,
    num int1,
    stage enum('a','b','c'),
    unique(id,stage)
);

这是数据的片段

INSERT INTO `foo` (`id`, `num`, `stage`) VALUES
(1, 1, 'a'),
(1, 2, 'b'),
(1, 3, 'c'),
(2, 1, 'a'),
(2, 2, 'b'),
(2, 3, 'c'),
(3, 1, 'a'),
(3, 2, 'b'),
(4, 1, 'a');

桌子上的注释

具有 c 状态的 id 必须具有 a,b 的先前状态触发没有问题

将此查询为

Heidisql 输出

我使用 distinct 和标量相关子查询来做到这一点

SELECT DISTINCT
id, IFNULL((
SELECT num
FROM foo f
WHERE f.id = foo.id AND f.stage = 'a'),'') `a`, IFNULL((
SELECT num
FROM foo f
WHERE f.id = foo.id AND f.stage = 'b'),'') `b`, IFNULL((
SELECT num
FROM foo f
WHERE f.id = foo.id AND f.stage = 'c'),'') `c`
FROM foo 

[底线] 我想要一个更好的系紧来做到这一点

谢谢

4

2 回答 2

2
SELECT   id,
         MAX(IF(stage = 'a', num, NULL)) AS `a`
         MAX(IF(stage = 'b', num, NULL)) AS `b`
         MAX(IF(stage = 'c', num, NULL)) AS `c`
FROM     foo
GROUP BY id
于 2012-12-18T11:57:09.213 回答
1

尝试这个:

SELECT id, IF(a=0, '', a) a, IF(b=0, '', b) b, IF(c=0, '', c) c
FROM (SELECT id, SUM(IF(stage = 'a', num, '')) a, 
            SUM(IF(stage = 'b', num, '')) b, SUM(IF(stage = 'c', num, '')) c
    FROM foo GROUP BY id) AS A
于 2012-12-18T12:03:10.940 回答