SQL, объединяющий строки

253
picobit

У меня есть таблица, которая имеет три столбца: идентификатор, дата, группа. Для каждого уникального идентификатора есть две строки (где Group = 1 или где Group = 2). Как я могу объединить их в таблицу с одной строкой на идентификатор и значения даты, отсортированные по двум столбцам?

Я имею:

ID Date Group 123456 12/7/2016 1 123456 12/3/2016 2 789654 11/8/2016 1 789654 12/1/2016 2 

Я хочу:

ID Date1 Date2 123456 12/7/2016 12/3/2016 789654 11/8/2016 12/1/2016 

Это для Sybase 12, если это имеет значение.

0

2 ответа на вопрос

1
3N1GM4
SELECT DISTINCT  s.ID, s1.[Date] AS Date1, s2.[Date] AS Date2 FROM @SomeTable s LEFT JOIN @SomeTable s1 ON s.ID = s1.ID AND s1.[Group] = 1 LEFT JOIN @SomeTable s2 ON s.ID = s2.ID AND s2.[Group] = 2 

или же

SELECT DISTINCT s.ID, (SELECT [Date] FROM @SomeTable s1 WHERE s1.ID = s.ID AND s1.[Group] = 1) AS Date1, (SELECT [Date] FROM @SomeTable s2 WHERE s2.ID = s.ID AND s2.[Group] = 2) AS Date2 FROM @SomeTable s 

первые два способа, которые приходят на ум. Оба предполагают, что для каждой комбинации ID / группы существует только одна запись.

Благодарю. И да, ваше предположение верно. Я приму ваш ответ после того, как я вихрю в эту пятницу. picobit 7 лет назад 0
Спасибо, я использовал первый метод. Не пробовал второй. Соединение дважды кажется таким очевидным сейчас ... picobit 7 лет назад 0
1
Ben Slade

Вы также можете сделать это, используя только две таблицы в предложении from:

select a.ID, a.Date as Date1, b.Date as Date2 from mytable a, mytable b where a.ID=B.ID and a.Group=1 and b.Group=2