SQL Server 2000 - Как повернуть результаты объединения в окончательные результаты запроса? - PullRequest
3 голосов
/ 12 января 2011

Моя база данных довольно сложна, поэтому я упростил задачу до таблиц ниже.

TableA и TableB связаны полем NameID в TableB.Я пытаюсь создать оператор SQL для получения желаемых результатов.Я понимаю, что JOINs и как они работают, но я не могу запутаться в этом.

Никогда не будет более 2 пунктов в TableB для каждого элемента в TableA.Может быть менее 2 элементов.

Это будет использоваться на сервере SQL Server 2000.

TableA

ID | Name
---+-----
 1 | John
 2 | Jane
 3 | Bob
 4 | Doug

TableB

ID | NameID | Information
---+--------+------------
 1 |    1   | Apples
 2 |    1   | Apples
 3 |    2   | Pears
 4 |    2   | Grapes
 5 |    3   | Kiwi

Желаемый результат

ID | Name | InformationA | InformationB
---+------+--------------+-------------
 1 | John | Apples       | Apples
 2 | Jane | Pears        | Grapes
 3 | Bob  | Kiwi         | NULL
 4 | Doug | NULL         | NULL

Ответы [ 2 ]

3 голосов
/ 12 января 2011

(отредактировано, чтобы дать предпочтительный порядок для двух столбцов)

SELECT a.Id,
       a.Name,
       STUFF(MIN(STR(b.Id, 10) + b.Information), 1, 10, '') AS InformationA,
       CASE
         WHEN COUNT(b.Id) = 2 THEN STUFF(MAX(STR(b.Id, 10) +
                                   b.Information), 1, 10, '')
       END                                                  AS InformationB
FROM   TableA a
       LEFT JOIN TableB b
         ON a.Id = b.NameId
GROUP  BY a.Id,
          a.Name  
0 голосов
/ 12 января 2011

Я думаю, что вам нужно сделать это пивот .Посмотрите и посмотрите, подходит ли вам это.

...