Member 13096349 Ответов: 2

Как изменить строку на столбец в SQL


create table example(MONTH VARCHAR(MAX),ORDERS VARCHAR(MAX))

INSERT INTO example VALUES('Jan','1');
INSERT INTO example VALUES('Feb','2');
INSERT INTO example VALUES('Mar','3');

SELECT* FROM example
SELECT  'Assign' Assign ,*,'Total' [Total] into #final  from (SELECT * FROM example) AS A pivot(MAX(ORDERS) FOR[MONTH] IN(a,b,c)) AS pvt
select * from #final
DROP table #final


он должен показывать название месяца вместо a, b,c это динамическая таблица, поэтому название месяца будет меняться каждый раз

Что я уже пробовал:

он должен показывать название месяца вместо a, b,c это динамическая таблица, поэтому название месяца будет меняться каждый раз

2 Ответов

Рейтинг:
5

Member 9831003

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

создать таблицу #temp
(
МЕСЯЦ ВАРЧАР(МАКС.),
ЗАКАЗЫ VARCHAR(МАКС.)
)

Вставить в #temp значения ('Jan', '1');
Вставить в # temp значения ('Feb', '2');
Вставить в #temp значения ('Mar', '3');
Вставить в # temp значения ('Feb', '7');


Объявите @cols как NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@cols1 как NVARCHAR(макс.)

select @cols1=(SELECT', ' + QUOTENAME(месяц)
from #temp order by orders
ПО ПУТИ В XML("), ТИПА).значение('.', 'ТИП NVARCHAR(МАКС)')


select @cols=STUFF(@cols1
,1,1,'' )

набор @запрос = "выбрать" + @гуара + '
от
(
Выберите месяц, заказы
с #темп
) икс
стержень
(
Макс (заказы)
за месяц в (' + @cols + ')
) п '
print @query

выполнение запроса)


Рейтинг:
12

_Asif_

Сначала в предложение запроса-это неправильно. Правильный способ сделать это таков

DECLARE @TBL TABLE
(
MONTH VARCHAR(MAX),
ORDERS VARCHAR(MAX)
)

INSERT INTO @TBL VALUES('Jan','1');
INSERT INTO @TBL VALUES('Feb','2');
INSERT INTO @TBL VALUES('Mar','3');

SELECT  'Assign' Assign ,*,'Total' [Total] 
from 
(
	SELECT * FROM @TBL
) AS A pivot(MAX(ORDERS) FOR[MONTH] IN(Jan,Feb,Mar)) AS pvt

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

Динамический сводный запрос SQL Server? - переполнение стека[^]
Динамический сводный запрос в SQL Server[^]
Динамический свод в Sql Server | SqlHints.com[^]


Karthik_Mahalingam

5

CPallini

5.