SQL Combinando Linhas

0

Eu tenho uma tabela com três colunas: ID, Data, Grupo. Existem duas linhas para cada ID exclusivo (onde Grupo = 1 ou onde Grupo = 2). Como posso combinar isso em uma tabela com uma linha por ID e os valores de Data classificados em duas colunas?

Eu tenho:

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

Eu quero:

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

Isso é para o Sybase 12, se isso importa.

    
por picobit 07.12.2016 / 22:30

2 respostas

1
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

ou

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

são as duas primeiras formas que vêm à mente. Ambos presumem que existe apenas um registro para cada combinação de ID / Grupo.

    
por 07.12.2016 / 23:07
1

Você também pode fazer isso usando apenas duas tabelas na cláusula 'de':

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
    
por 21.02.2017 / 18:08

Tags