2009-07-14 4 views
2

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

Column1 Column2 Column3 Column4 Column5 Column6 
------------------------------------------------------------------- 
6  Joy  Mycity NZ  123456 [email protected] 

мне нужно Disply как -

SingleColumn 
----------------------- 
6 
joy 
mycity 
NZ 
123456 
[email protected] 

Как я это делаю?

+0

данные, которые будут использоваться в качестве столбцов вместо строки sinle – 2009-07-14 13:39:32

+0

отображение через какие средства/в каком контексте? – jlarson

ответ

0

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

SELECT col1 + «» + col2 + ...., чтобы объединить их все вместе.

+0

За исключением того, что вы хотите объединиться с новыми символами, а не пробелами, я думаю. – pdbartlett

3

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

0

Если вам нужно отобразить данные в такой форме, я бы сначала извлек данные - предположительно одну строку из нескольких столбцов из одной таблицы - из баз данных, а затем использовал используемый инструмент/язык для получения данных (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

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

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

Как бы вы писали о невинности, чтобы сделать это? –

Смежные вопросы