gpt4 book ai didi

sql-server - 按列名连接表,将字符串转换为列名

转载 作者:行者123 更新时间:2023-12-02 19:36:54 25 4
gpt4 key购买 nike

我有一个表,每个调查存储 1 行。
每项调查大约有 70 个问题,每栏提出 1 个问题

SurveyID  Q1, Q2   Q3   .....
1 Yes Good Bad ......

我想旋转它,以便它显示

SurveyID Question  Answer
1 Q1 Yes
1 Q2 Good
1 Q3 Bad
... ... .....

我使用{cross apply}来实现这一点

   SELECT t.[SurveyID]
, x.question
, x.Answer
FROM tbl t
CROSS APPLY
(
select 1 as QuestionNumber, 'Q1' as Question , t.Q1 As Answer union all
select 2 as QuestionNumber, 'Q2' as Question , t.Q2 As Answer union all
select 3 as QuestionNumber, 'Q3' as Question , t.Q3 As Answer) x

这可行,但我不想这样做 70 次,所以我有这个 select 语句

    select ORDINAL_POSITION
, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = mytable

这给了我列的列表以及列在表中的位置。所以我希望我能以某种方式将第二个语句与第一个语句按列名称连接起来。不过,我在这里比较列和列标题中的内容。可行吗?还有其他方法可以实现这一目标吗?

希望您能指导我吗?

谢谢

最佳答案

您应该使用 UNPIVOT 来执行此查询,而不是交叉应用...

SQL Fiddle

MS SQL Server 2008 架构设置:

CREATE TABLE Test_Table(SurveyID  INT, Q1 VARCHAR(10)
, Q2 VARCHAR(10), Q3 VARCHAR(10), Q4 VARCHAR(10))

INSERT INTO Test_Table VALUES
(1 , 'Yes', 'Good' , 'Bad', 'Bad')
,(2 , 'Bad', 'Bad' , 'Yes' , 'Good')

查询 1:

SELECT SurveyID
,Questions
,Answers
FROM Test_Table t
UNPIVOT ( Answers FOR Questions IN (Q1,Q2,Q3,Q4))up

<强> Results :

| SurveyID | Questions | Answers |
|----------|-----------|---------|
| 1 | Q1 | Yes |
| 1 | Q2 | Good |
| 1 | Q3 | Bad |
| 1 | Q4 | Bad |
| 2 | Q1 | Bad |
| 2 | Q2 | Bad |
| 2 | Q3 | Yes |
| 2 | Q4 | Good |

关于sql-server - 按列名连接表,将字符串转换为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com