Member 8782777 Ответов: 3

Конвертировать выберите поисковой строки запроса для столбца имя столбца и значение.


Это фиктивные данные. Мне нужно преобразовать строки в столбцы как имя столбца в первом столбце и значение во втором столбце

Реальный результат
id	First Name	Middle Name	Last Name	City
1	A1	         B1	         C1	         D1
2	A2	         B2              C2	         D2


Ожидаемый результат
id	        1   2
First Name	A1	A2
MiddleName	B1	B2
LastName	C1	C2
City	    D1  D2


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

Попробовал разворот но не получил ожидаемого результата

3 Ответов

Рейтинг:
20

Maciej Los

Оригинал Грифф прав!
Вы должны использовать unpivot + pivot ;)

Видеть:

DECLARE @tmp TABLE(id INT IDENTITY(1,1), [First Name] NVARCHAR(30), [Middle Name] NVARCHAR(30), [Last Name] NVARCHAR(30), City NVARCHAR(30))

INSERT INTO @tmp ([First Name], [Middle Name], [Last Name], City)
VALUES('A1', 'B1', 'C1', 'D1'),
('A2', 'B2', 'C2', 'D2')

SELECT Headers AS Id, [1], [2]
FROM (
	SELECT id, Headers, Data
	FROM (
		SELECT *
		FROM @tmp 
		) AS src1
	UNPIVOT(Data FOR Headers IN([First Name], [Middle Name], [Last Name], City)) AS unpvt
	) AS src2
PIVOT(MAX(Data) FOR id IN([1], [2])) AS pvt2


Результат:
Id	        1	2
City	    D1	D2
First Name	A1	A2
Last Name	C1	C2
Middle Name	B1	B2


Удачи вам!


0x01AA

Привет Мацей
Не могли бы вы намекнуть, почему бы и нет? По крайней мере, для Q версии 3 Мне кажется, что это простой Pivot? Чего мне не хватает?
Спасибо, Бруно

*lol* это был комментарий, который я дал вашему комментарию в решении ppolymorphe, и теперь он появляется здесь ... странно

Maciej Los

Бруно,
Как можно короче...
Вам нужно "преобразовать" набор столбцов в строки для каждого идентификатора (unpivot):

id	Headers	Data
1	First Name	A1
1	Middle Name	B1
1	Last Name	C1
1	City	D1
2	First Name	A2
2	Middle Name	B2
2	Last Name	C2
2	City	D2

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

Овации,
Мацей

0x01AA

Ладно, я не знаком с Pivot, никогда им не пользовался. Я думал, что до сих пор это просто что - то вроде транспонирования матрицы. Теперь юрист SQL (вы) говорит мне что-то вроде: "это не только транспонирование". Вывод: мне нужно прочитать об этом более внимательно.
Спасибо, Бруно
И еще 5

Maciej Los

Моей первой мыслью было тоже использовать single pivot... потом я понял, что сначала мне нужно преобразовать набор столбцов в строки. (см. обновленный предыдущий комментарий)

Спасибо, Бруно.

Ваше здоровье!
Мацей

Member 8782777

Большое вам спасибо, Мацей Лос. Это сработало для меня.

Все столбцы должны иметь один и тот же тип данных. В противном случае он вернет ошибку "тип столбца "@column_name" конфликтует с типом других столбцов, указанных в списке UNPIVOT."

Maciej Los

Всегда пожалуйста.

Рейтинг:
20

OriginalGriff

Видеть здесь: Использование PIVOT и UNPIVOT[^]


Member 8782777

Так должен ли я попробовать несколько поворотов? Не могли бы вы предоставить мне пример запроса?

Maciej Los

5ed!

Рейтинг:
2

Patrice T

Цитата:
Конвертировать выберите поисковой строки запроса для столбца имя столбца и значение.

Это действие называется "поворот"
И помните: Google-ваш друг:
Простой способ использования Pivot в SQL-запросе[^]
SQL Server: сводное предложение[^]
Сводные данные в SQL | SQL Tutorial - Mode Analytics[^]


Maciej Los

Разворота недостаточно ;)