将列转置为行
transpose column to rows
我的table看起来像这样
SurveyId comments val paramid
123 test1 100 1
123 test2 200 2
123 test3 300 3
456 test10 200 1
456 test20 150 2
456 test30 320 3
我期待类似下面基于 paramid 的东西
surveyid comments1 comments2 comments3 1 2 3
123 test1 test2 test3 100 200 300
456 test10 test20 test30 200 150 320
尝试如下使用枢轴
select *
from
(
SELECT
surveyid
,val
,comments
,paramid
FROM sample_table where comments is not null and surveyid = 123
) a
pivot
(
max([val])
for [paramid] in ([1], [2], [3])
) piv;
有人可以告诉我上面的代码有什么问题吗?
你可以试试这个..它很简单,只使用一个 GROUP BY 子句。(在 MYSQL 中试过并且工作正常)
SELECT
surveyid
,MAX(comments1) AS comments1
,MAX(comments2) AS comments2
,MAX(comments3) AS comments3
,MAX(COL1) AS COL1
,MAX(COL2) AS COL2
,MAX(COL3) AS COL3
FROM
(
SELECT
surveyid
,CASE WHEN paramid=1 then comments else '' END AS comments1
,CASE WHEN paramid=2 then comments else '' END AS comments2
,CASE WHEN paramid=3 then comments else '' END AS comments3
,CASE WHEN paramid=1 then val else '' END AS COL1
,CASE WHEN paramid=2 then val else '' END AS COL2
,CASE WHEN paramid=3 then val else '' END AS COL3
FROM test.sample_table
) TMP
GROUP BY surveyid
结果:
123 测试 1 测试 2 测试 3 100 200 300
456 测试10 测试20 测试30 200 150 320
我的table看起来像这样
SurveyId comments val paramid
123 test1 100 1
123 test2 200 2
123 test3 300 3
456 test10 200 1
456 test20 150 2
456 test30 320 3
我期待类似下面基于 paramid 的东西
surveyid comments1 comments2 comments3 1 2 3
123 test1 test2 test3 100 200 300
456 test10 test20 test30 200 150 320
尝试如下使用枢轴
select *
from
(
SELECT
surveyid
,val
,comments
,paramid
FROM sample_table where comments is not null and surveyid = 123
) a
pivot
(
max([val])
for [paramid] in ([1], [2], [3])
) piv;
有人可以告诉我上面的代码有什么问题吗?
你可以试试这个..它很简单,只使用一个 GROUP BY 子句。(在 MYSQL 中试过并且工作正常)
SELECT
surveyid
,MAX(comments1) AS comments1
,MAX(comments2) AS comments2
,MAX(comments3) AS comments3
,MAX(COL1) AS COL1
,MAX(COL2) AS COL2
,MAX(COL3) AS COL3
FROM
(
SELECT
surveyid
,CASE WHEN paramid=1 then comments else '' END AS comments1
,CASE WHEN paramid=2 then comments else '' END AS comments2
,CASE WHEN paramid=3 then comments else '' END AS comments3
,CASE WHEN paramid=1 then val else '' END AS COL1
,CASE WHEN paramid=2 then val else '' END AS COL2
,CASE WHEN paramid=3 then val else '' END AS COL3
FROM test.sample_table
) TMP
GROUP BY surveyid
结果: 123 测试 1 测试 2 测试 3 100 200 300 456 测试10 测试20 测试30 200 150 320