Member 12340963 Ответов: 1

Как преобразовать столбцы в строки


Привет друзья я обнаружил, что этот сайт проекта кода предоставляет лучшие решения и помощь, что делает разработку более легкой, и этот сайт помогает общаться с другими профессиональными разработчиками, чтобы они могли поделиться своими важными знаниями, которые требуют этого я хочу сказать спасибо разработчикам и проекту кода за их большую работу.
У меня есть таблица в которой я хочу преобразовать столбцы в строки
+--------------+--------------+--------------+--------------+
|(Column Name1)|(Column Name2)|(Column Name3)|(Column Name4)|
+--------------+--------------+-------------+---------------+
|Data11        |Data21        |Data31       |Data41         |
+--------------+--------------+-------------+---------------+
|Data12        |Data22        |Data32       |Data42         |
+--------------+--------------+-------------+---------------+
|Data13        |Data23        |Data33       |Data43         |
+--------------+--------------+-------------+---------------+
|Data14        |Data24        |Data34       |Data44         |
+--------------+--------------+-------------+---------------+
|Data15        |Data25        |Data35       |Data45         |
+--------------+--------------+-------------+---------------+

Вышеприведенный столбец таблицы должен выглядеть так же, как и нижеприведенная таблица:
+--------+--------+--------+--------+--------+
| (Col1) | (Col2) | (Col3) | (Col4) | (Col5) |
+--------+--------+--------+--------+--------+
| Data11 | Data12 | Data13 | Data14 | Data15 |
+--------+--------+--------+--------+--------+
| Data21 | Data22 | Data23 | Data24 | Data25 |
+--------+--------+--------+--------+--------+
| Data31 | Data32 | Data33 | Data34 | Data35 |
+--------+--------+--------+--------+--------+
| Data41 | Data42 | Data43 | Data44 | Data45 |
+--------+--------+--------+--------+--------+

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

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

Declare @cols nvarchar(max)
Declare @query nvarchar(max)

Select @cols = stuff((select ','+QuoteName(Row_Number() over (Order by (Select NULL))) from #cols for xml path('')),1,1,'')
Select @query = ' Select * from (
    Select colname, RowN = Row_Number() over (order by colname) from #cols
    ) a
    pivot (max(colname) for RowN in (' + @cols + ')) p '

Exec sp_executesql @query

Пожалуйста, помогите мне найти решение.

1 Ответов

Рейтинг:
1

Dirk Bahle

Я думаю, что вы хотите получить unpivot, а не pivot, как насчет следующего кода:

-- Create the table and insert values as portrayed in the previous example.  
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,  
    Emp3 int, Emp4 int, Emp5 int);  
GO  
INSERT INTO pvt VALUES (1,4,3,5,4,4);  
INSERT INTO pvt VALUES (2,4,1,5,5,5);  
INSERT INTO pvt VALUES (3,4,3,5,4,4);  
INSERT INTO pvt VALUES (4,4,2,5,5,4);  
INSERT INTO pvt VALUES (5,5,1,5,5,5);  
GO  
-- Unpivot the table.  
SELECT VendorID, Employee, Orders  
FROM   
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5  
   FROM pvt) p  
UNPIVOT  
   (Orders FOR Employee IN   
      (Emp1, Emp2, Emp3, Emp4, Emp5)  
)AS unpvt;  
GO  


взято отсюда: От - использование PIVOT и UNPIVOT | Microsoft Docs[^]

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