Перестановка строк в SQL Server 2005/2000 - PullRequest
1 голос
/ 06 июня 2009

В SQL Server 2005 у меня есть таблица, скажем, tbl_Info. Там у меня есть один столбец сказать Info.

Значения как под

Name1
Age1
Sex1
Name2
Age2
Sex2
.....
.....
.....

И значения строк продолжаются следующим образом.

У меня вопрос, как сделать транспозицию строки col.

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

Name      Age        Sex

Name1      Age1      Sex1
Name2     Age2       Sex2

.....     ....     ........
.....     ....      ........

Вы можете использовать табличную переменную или временную таблицу.

И, пожалуйста, не давайте решение, используя сборки. Потому что я уже сделал это с помощью сборок, но я хочу решение, которое я могу даже использовать в SQL Server 2000.

Ответы [ 2 ]

1 голос
/ 06 июня 2009

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

CREATE TABLE foo (ord INT, col VARCHAR)

с ord, просто вставленным как 0, 1, 2 и т. Д.

Теперь SELECT, который вы хотите:

SELECT a.col AS Name, b.col AS Age, c.col AS Sex
  FROM foo AS a
  JOIN foo AS b ON(b.ord=1+a.ord)
  JOIN foo AS c ON(c.ord=2+a.ord)
  WHERE a.ord%3=0

, который будет работать практически на _any_thing, который смеет называть себя "SQL"; -).

Например, когда данные:

  ord   col
    0  John
    1    23
    2     M
    3  Mary
    4    21
    5     F
    6  Karl
    7    25
    8     M

результат выше SELECT:

 Name   Age   Sex
 John    23     M
 Mary    21     F
 Karl    25     M
0 голосов
/ 06 июня 2009

Вы хотите Поворот таблицы. Однако обычно требуется как минимум два столбца (один для ключа и один для значения), а также, как правило, необходимо заранее знать, какие столбцы ожидаются в результатах.

...