Как повернуть стол - PullRequest
       5

Как повернуть стол

0 голосов
/ 11 января 2020

Я хочу перейти из этой таблицы enter image description here в эту таблицу enter image description here

И этот код пока что

'' '

SELECT * FROM (SELECT Qid, Tokyo FROM @temp_rawSurvey) AS t1 
PIVOT ( MAX(Tokyo) FOR Qid IN(Q1,Q2,Q3,Q4,Q5,Q6) ) AS t2

UNION

SELECT * FROM (SELECT Qid, Boston FROM @temp_rawSurvey) AS t1 
PIVOT ( MAX(Boston) FOR Qid IN(Q1,Q2,Q3,Q4,Q5,Q6) ) AS t2

UNION

SELECT * FROM (SELECT Qid, London FROM @temp_rawSurvey) AS t1 
PIVOT ( MAX(London) FOR Qid IN(Q1,Q2,Q3,Q4,Q5,Q6) ) AS t2

UNION

SELECT * FROM (SELECT Qid, new_york FROM @temp_rawSurvey) AS t1 
PIVOT ( MAX(new_york) FOR Qid IN(Q1,Q2,Q3,Q4,Q5,Q6) ) AS t2

' ''

  1. Есть ли способ добавить столбец города перед столбцами вопроса?
  2. есть ли лучший способ сделать это? Любой совет приветствуется и спасибо заранее.

** Я использую MS SQL 2017. Извините, что пропустил эту информацию.

Ответы [ 2 ]

0 голосов
/ 12 января 2020

попробуйте следующее с помощью pivot и unpivot:

declare @tab table (QuestionID varchar(5), Tokyo int, Boston int, London int, [New York] int)
insert into @tab select 'Q1', 1,42,48,51
insert into @tab select 'Q2', 22,39,58,42
insert into @tab select 'Q3', 29,41,61,33
insert into @tab select 'Q4', 62,70,60,50
insert into @tab select 'Q5', 63,31,41,21
insert into @tab select 'Q6', 32,1,16,34

select * from @tab

select City, Q1, Q2, Q3, Q4, Q5, Q6
from
(   select City, points, QuestionID
    from @tab
    unpivot
    (
        points for City in ([Tokyo], [Boston], [London], [New York])
    )unpvt
)x
pivot
(
    sum(points) for questionid in (Q1, Q2, Q3, Q4, Q5, Q6)
)pvt

SQL Fiddle Demo

0 голосов
/ 11 января 2020

Я думаю, вы хотите что-то вроде этого:

SELECT which,
       MAX(CASE WHEN qid = 'Q1' THEN val END) as Q1,
       MAX(CASE WHEN qid = 'Q2' THEN val END) as Q2,
       MAX(CASE WHEN qid = 'Q3' THEN val END) as Q3,
       . . . 
FROM @temp_rawSurvey t CROSS APPLY
     (VALUES ('Tokyo', t.Tokyo),
             ('Boston', t.Boston), 
             . . . 
     ) v(which, val)
GROUP BY which
...