Как преобразовать одну строку в столбец в SQL Server 2005 - PullRequest
2 голосов
/ 14 июля 2009

У меня есть таблица, и она возвращает данные как -

Column1  Column2    Column3   Column4   Column5   Column6
-------------------------------------------------------------------
6        Joy        Mycity    NZ        123456    myemail@gamil.com

Мне нужно показать это как -

SingleColumn
-----------------------
6
joy
mycity
NZ
123456
myemail@gmail.com

Как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 14 июля 2009

Я бы заставил запрос продолжать возвращать данные в том виде, в каком вы находитесь в данный момент, в виде отдельных столбцов, и вместо этого заставлял бы код пользовательского интерфейса форматировать их так, как это необходимо. Делает его более гибким, так что вы можете иметь x разных отображений одних и тех же данных, используя один и тот же запрос в качестве источника данных.

0 голосов
/ 14 июля 2009

SQL Server 2005 поставляется с функциями PIVOT / UNPIVOT , которые делают именно это.

SELECT SingleColumn FROM
  (SELECT CAST(Column1 AS VARCHAR(128)) AS c1,
          CAST(Column2 AS VARCHAR(128)) AS c2,
          CAST(Column3 AS VARCHAR(128)) AS c3,
          CAST(Column4 AS VARCHAR(128)) AS c4,
          CAST(Column5 AS VARCHAR(128)) AS c5,
          CAST(Column6 AS VARCHAR(128)) AS c6
    FROM (...) AS t
  ) AS p
  UNPIVOT (SingleColumn FOR cols IN (c1, c2, c3, c4, c5, c6)) AS unp
0 голосов
/ 14 июля 2009

Если вам «нужно отобразить» данные в такой форме, я сначала извлеку данные - предположительно одну строку из нескольких столбцов из одной таблицы - из баз данных, а затем использовал инструмент / язык, используемый для извлекать данные (C #, Java и т. д.) для форматирования данных так, как они должны отображаться, или на что бы то ни было для их отображения. SQL предназначен для хранения и извлечения данных, а не для форматирования их для отображения на экране.

С учетом сказанного, если бы мне пришлось возвращать (скажем) значения из 5 отдельных столбцов из одной строки одной таблицы, я бы взломал это примерно так:

SELECT Col1 as Data, 1 as MyOrder from MyTable where MyTableId = @DesiredRow
UNION ALL SELECT Col2, 2 from MyTable where MyTableId = @DesiredRow
UNION ALL SELECT Col3, 3from MyTable where MyTableId = @DesiredRow
UNION ALL SELECT Col4, 4 from MyTable where MyTableId = @DesiredRow
UNION ALL SELECT Col5, 5 from MyTable where MyTableId = @DesiredRow
order by MyOrder

(нужно посмотреть, правильно ли отформатирован ...) Вы только должны псевдоним столбца в первом выборе. Хм, будут и другие соображения, такие как (1) тип данных возвращаемого столбца будет типом данных первого выбора, поэтому вам может потребоваться много приведений, таких как

...select cast(Col1 as varchar(100)) As Data...

(2) Это, вероятно, упорядочит строки, возвращенные в том порядке, в котором они были выбраны, я бросил в этом порядке, просто чтобы быть уверенным. И (3) Ваш пробег может варьироваться в зависимости от соображений применения, о которых я не знаю сейчас.

Удачи!

0 голосов
/ 14 июля 2009

Может быть, я что-то упустил, но вы не могли сделать

ВЫБЕРИТЕ col1 + '' + col2 + ...., чтобы объединить их все вместе.

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