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出力

私はこれをスカラー相関サブクエリと区別して使用しました

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 に答える