Как получить строки в колонке в SQL? - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть запись в моей таблице, например

memberId    PersonId    Year
4057        1787         2
4502        1787         3

Я хочу получить результат от запроса, подобного этому

memberId1   MemberId2   PersonId
4057        4502        1787

Как написать запрос ??

Ответы [ 4 ]

2 голосов
/ 16 декабря 2011

Не делайте этого в запросе, делайте это на прикладном уровне.

1 голос
/ 16 декабря 2011

Не делайте этого в SQL.В лучшем случае вы можете попробовать:

SELECT table1.memberId memberId1, table2.memberId MemberId2, PersonId
FROM table table1 JOIN table table2 USING (PersonId)

Но это не будет делать то, что вы ожидаете, если у вас более 2 участников на человека.(Он вернет все возможные комбинации.)

0 голосов
/ 16 декабря 2011

если вы хотите, чтобы все идентификаторы элементов для каждого person_id использовались, оператор [for xml path] (отличная функциональность) объединял все memberId в строку

select distinct PersonId
       , (select ' '+cast(t0.MemberId as varchar)
          from table t0 
          where t0.PersonId=t1.PersonId
          for xml path('')
         ) [Member Ids]
from table t1

, что приводит к:

PersonId   Members Ids
1787      ' 4057 4502'

если вам действительно нужны отдельные столбцы с неограниченным числом идентификаторов членов, рассмотрите возможность использования таблицы PIVOT, но гораздо сложнее использовать

0 голосов
/ 16 декабря 2011

Ниже приведен пример того, как сделать это непосредственно в SQL. Имейте в виду, что есть много возможностей для оптимизации, но эта версия должна быть довольно быстрой, особенно если у вас есть индекс PersonID и год.

SELECT DISTINCT PersonID,
                memberId1 = Convert(int, NULL),
                memberId2 = Convert(int, NULL)
  INTO #result
  FROM myTable
 WHERE Year IN (2 , 3)

CREATE UNIQUE CLUSTERED INDEX uq0_result ON #result (PersonID) 

UPDATE #result 
   SET memberId1 = t.memberId
  FROM #result upd
  JOIN myTable t
    ON t.PersionId = upd.PersonID
   AND t.Year = 2

UPDATE #result 
   SET memberId2 = t.memberId
  FROM #result upd
  JOIN myTable t
    ON t.PersionId = upd.PersonID
   AND t.Year = 3

SELECT * FROM #result 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...