Как выбрать данные из строк и отобразить их в виде столбцов с помощью хранимой процедуры? - PullRequest
2 голосов
/ 31 марта 2009

У меня есть таблица с данными в этом виде:

Cars:
id | name
----------
1  | Buick
2  | Honda
3  | Toyota

То, что я хотел бы сделать в хранимой процедуре, это получить такой результат:

Temp Table:
Buick | Honda | Toyota
----------------------

Я понимаю, что у него нет значений, но я просто хочу сначала получить эту часть.

Я предполагаю, что это будет связано с какой-то временной таблицей.

Использование MS SQL 2005.

Ответы [ 3 ]

7 голосов
/ 31 марта 2009

Вы ищете Pivot ?

Вот (слегка надуманный) пример, основанный на примере MSDN, измененном для вашего примера:

SELECT 'Count' AS Header,
    [Toyota], [Buick], [Honda]
FROM (SELECT id, Name FROM Cars) AS SourceTable
    PIVOT( COUNT(ID) FOR Name IN ([Toyota], [Buick], [Honda])) AS PivotTable
0 голосов
/ 31 марта 2009

Вы можете создать временную таблицу, затем создать курсор для выбора из таблицы Cars и для каждой строки динамически создать и выполнить запрос SQL, который добавляет поле во временную таблицу.

Но почему вы пытаетесь сделать что-то подобное? Вы смешиваете данные с метаданными, и это редко хорошая идея. Код для заполнения временной таблицы данными будет даже хуже, чем код для ее создания.

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

0 голосов
/ 31 марта 2009

Вы хотите конкатенацию строк или PIVOT, как предложено выше? Вопрос был неоднозначным, вы хотите, чтобы значения строк превращались в столбцы (PIVOT) или выводились?

просто прочитайте это как 1 час назад на форуме MSDN Использовать FOR XML

SELECT 
STUFF(
(
SELECT ' ' + name
FROM @table
FOR XML PATH('')
), 1, 1, '') as concatenated_string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...