Отобразить одну запись (строку) в виде одного столбца - PullRequest
0 голосов
/ 24 декабря 2008

Я ищу способы отображения одной строки данных в виде одного столбца (с несколькими строками). Например,

FieldA  FieldB
------- ---------
1       Some Text [row]


Header Value [col]
------ ------
FieldA 1          [row1]
FieldB SomeText   [row2]

Есть ли способ сделать это с SQL Server 2005?

Ответы [ 5 ]

2 голосов
/ 24 декабря 2008

Вы можете использовать unpivot объяснено здесь

Declare @tbl Table
(
  c1 int,
  c2 int,
  c3 int
)

Insert into @tbl Values(1,2,3)

Select
  cname,
  cval
From
  (
    Select C1,C2,C3 From @tbl
  ) t
UNPIVOT
  (Cval For Cname In
    (C1,C2,C3)
  )As U

Но обычно это негибко и медленно. Вы можете использовать объединение, но обычно оно хуже с точки зрения обслуживания, но может быть быстрым (необходимо проверить) или использовать динамический запрос и объединение

2 голосов
/ 24 декабря 2008

Да, есть команда TSQL, PIVOT. И есть несколько существующих тем на эту тему; но я не могу найти один от руки.

Мой обычный ответ (вероятно, 5 или 6 из этих тем) - подумать об использовании Excel или Access, если это уместно, - это довольно простой способ доставить ценность конечным пользователям. Но YMMV.

1 голос
/ 24 декабря 2008

Как и в некоторых других ответах, используйте команду T-SQL PIVOT.

Если у вас есть доступ к службам отчетов SQL Server, вы можете создать отчет на основе вашего простого запроса и использовать элемент управления матричным отчетом. Перетащите свои поля на элемент управления, и все готово!

1 голос
/ 24 декабря 2008

Еще один простой способ:

выберите 'FieldA', FieldA в качестве значения из таблицы
союз
выберите «FieldB», FieldB в качестве значения из таблицы

но стержни действительно то, что вы хотите попробовать.

0 голосов
/ 23 января 2009

Если вы ищете что-то конкретное, то есть не общее решение, а то, которое адаптировано к вашей конкретной БД, тогда вы можете сделать что-то вроде этого:

select Field1+';'+convert(nvarchar(255), Field2 )+';'+convert(nvarchar(255),Field3 ) from Table

Используйте преобразования в nvarchar (255), чтобы у вас не было проблем, независимо от того, какие символы в нем есть, не забудьте исправить сопоставление перед запуском select (вы никогда не знаете, что произойдет с вашими orderby и groupby, иначе ).

...