Проблема SQL JOIN при присоединении к одной таблице - PullRequest
0 голосов
/ 21 августа 2011

Вот мои данные макета:

Группа:

MAINGROUP SUBGROUP
1         A
2         A
3         A 
1         B
2         B
3         C
1         D
2         D
3         D
2         E
3         E

Я пытаюсь написать запрос, который будет возвращать мне по одной строке на каждую подгруппу, с одним полем для каждой MAINGROUP, отображающим номер группы. Если подгруппа не имеет подходящей группы, я хочу, чтобы это поле группы было NULL.

Вот что я хочу:

Subgroup  G1  G2  G3
A         1   2   3
B         1   2 
C                 3

Вот мой запрос:

SELECT 
    g.subgroup AS Subgroup, 
    1.maingroup AS G1, 
    2.maingroup AS G2, 
    3.maingroup AS G3, 
FROM Groups g
LEFT JOIN(
        SELECT maingroup, subgroup
        FROM Groups
        WHERE maingroup = 1
        ) 1
        ON g.subgroup=1.subgroup
        AND g.maingroup=1.maingroup
LEFT JOIN(
        SELECT maingroup, subgroup
        FROM Groups
        WHERE maingroup = 2
        ) 2
        ON g.subgroup=2.subgroup
        AND g.maingroup=2.maingroup
LEFT JOIN(
        SELECT maingroup, subgroup
        FROM Groups
        WHERE maingroup = 3
        ) 3
        ON g.subgroup=3.subgroup
        AND g.maingroup=3.maingroup
WHERE g.subgroup IN ('A','B','C')

И вот что я получаю:

Subgroup  G1  G2  G3
A         1     
A             2 
A                 3
B         1     
B             2 
B
C           
C           
C                 3

Любая помощь и советы очень ценятся.

1 Ответ

1 голос
/ 21 августа 2011

Попробуйте это:

SELECT g.subgroup AS Subgroup, 
    mg1.maingroup AS G1, 
    mg2.maingroup AS G2, 
    mg3.maingroup AS G3
FROM (SELECT DISTINCT subgroup FROM Groups) g
LEFT JOIN Groups mg1 ON mg1.maingroup = 1 AND mg1.subgroup = g.subgroup
LEFT JOIN Groups mg2 ON mg2.maingroup = 2 AND mg2.subgroup = g.subgroup
LEFT JOIN Groups mg3 ON mg3.maingroup = 3 AND mg3.subgroup = g.subgroup
WHERE g.subgroup IN ('A','B','C');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...