HARDIK SIMARIYA Ответов: 3

Я хочу транспонировать данные, например


у меня есть эти данные

Date          ColumnName1 ColumnName2  ColumnName3  ColumnName4  ColumnName5

2018-04-01             1            2           3            4            5
2018-04-02             6            7           8            9           10
2018-04-03            11           12          13           14           15
2018-04-04            16           17          18           19           20
2018-04-05            21           22          23           24           25


И мне нужны такие данные, как

Date          2018-04-01     2018-04-02     2018-04-03    2018-04-03     2018-04-05 
ColumnName1            1              6             11            16             21
ColumnName2            2              7             12            17             22
ColumnName3            3              8             13            18             23
ColumnName4            4              9             14            19             24
ColumnName5            5             10             15            20             25


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

без понятия. я не знаю, что делать. Я пытался
pivoting and unpivoting

3 Ответов

Рейтинг:
2

Member 12207816

Вы можете использовать sql "pivot" для получения требуемого результата.

Синтаксис :

SELECT <non-pivoted column>,  
       <list of pivoted column>  
FROM  
(<select query="" to="" produces="" the="" data="">)  
    AS <alias name>  
PIVOT  
(  
<aggregation function>(<column name>)  
FOR  
[<column name that  become column headers>]  
    IN ( [list of  pivoted columns])  
  
) AS <alias name  for  pivot table>


В вашем случае :

SELECT ColumnName1 , ColumnName2  ,ColumnName3  ,ColumnName4  ColumnName5 FROM   
(SELECT [Date] , [2018-04-01] , [2018-04-02],[2018-04-03],[2018-04-03],[2018-04-] FROM Employee ) Tab1  
PIVOT  
(  
max([Date]) FOR [Date] IN ( [2018-04-01] , [2018-04-02],[2018-04-03],[2018-04-03],[2018-04-])) AS Tab2


Надеюсь, это сработает.


Рейтинг:
2

W∴ Balboos, GHB

Существует два маршрута SQL:

1) создайте таблицу #temp и поместите в нее данные в желаемом (транспонированном) виде, а затем выполните простые запросы. Или даже построить представление, если это нужно использовать часто, и тогда оно всегда будет безболезненно доступно

2) Используйте серию внутренних соединений на одной и той же таблице. Я использую это для преобразования данных в Столбцах в данные в строках.

Что-то вроде:

SELECT A.field1 AS Column1, B.field1 AS Column2, C.field1 AS Column3,. . . .
 FROM Table AS A INNER JOIN Table AS B 
   ON A.somekeyfield=B.somekeyfield
 INNER JOIN Table as C
   ON A.somekeyfeld = C.somekeyfiled

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


Рейтинг:
1

Santosh kumar Pithani

CREATE TABLE #TEMP (Dates DATE,ColumnName1 int, ColumnName2 int, ColumnName3 int, ColumnName4 int,ColumnName5 int)
 INSERT INTO #Temp
 Values
 ('2018-04-01', 1, 2,  3, 4, 5)
,('2018-04-02', 6, 7,  8, 9,10)
,('2018-04-03',11,12, 13,14,15)
,('2018-04-04',16,17, 18,19,20)
,('2018-04-05',21,22, 23,24,25)

--if your server is old use unpivot instead of cross apply

;WITH CTE AS(select dates,colsdata,colname from #temp
   cross apply (values(ColumnName1,'ColumnName1'),(ColumnName2,'ColumnName2'),
                      (ColumnName3,'ColumnName3'),(ColumnName4,'ColumnName4'))AS allcol(colsdata,colname)
			 )

select * from CTE pivot(max(colsdata) for Dates in([2018-04-01],[2018-04-02],[2018-04-03],[2018-04-04],[2018-04-05]))AS Pvt

--OUTPUT:-
------------------------------------------------------------------------
colname	     2018-04-01	2018-04-02	2018-04-03	2018-04-04	2018-04-05
---------------------------------------------------------------------------
ColumnName1	      1	       6	      11	      16	      21
ColumnName2	      2	       7	      12	      17	      22
ColumnName3	      3	       8	      13	      18	      23
ColumnName4	      4	       9	      14	      19	      24


W∴ Balboos, GHB

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