如何用另一个 table 的值替换列名
How to replace column names with a value of another table
我有 table 个赞如下:
ID QuestionCode Question
1 Q1 What is your name
2 Q2 How old are you
3 Q3 Where are you from
此外,我有 table B,如下所示:
UserId Q1 Q2 Q3
1 Ahmad 22 Egypt
2 John 31 USA
3 Daniel 32 Mexico
我想要的是使用问题本身而不是列名称中的代码创建一个视图,例如:
UserId What Is Your Name How old are you Where are you from
1 Ahmad 22 Egypt
2 John 31 USA
3 Daniel 32 Mexico
最好的方法是什么?任何帮助将不胜感激。
谢谢。
你描述的转轴在直线上并不容易SQL;您可以编写一些动态 SQL 来基于第一个 table 创建列名和子查询,但是这样做可能相当繁琐,并且如果您得到错了。
https://www.red-gate.com/simple-talk/sql/t-sql-programming/easier-way-pivoting-data-sql-server/; 中突出显示了一种替代方法,它是否比动态 SQL 选项更简单很大程度上取决于您的经验水平。
已更新...错过了 2016 年标签
SQL 服务器在设计上是声明式的,不支持宏替换。
这留下了 Dynamic SQL.
这是动态的工作示例SQL
Declare @tsql nvarchar(max) = N'Select top 1 * from Answers
Select @tsql = 'Select '+stuff((Select ',' +expr From (
select expr=concat(coalesce(quotename(Question),Name),'=',Name)
From sys.dm_exec_describe_first_result_set(@tsql,null,null ) A
Left Join Questions B on B.QuestionCode=A.name
) src For XML Path ('')),1,1,'')+' From Answers'
Exec(@tsql)
结果
我有 table 个赞如下:
ID QuestionCode Question
1 Q1 What is your name
2 Q2 How old are you
3 Q3 Where are you from
此外,我有 table B,如下所示:
UserId Q1 Q2 Q3
1 Ahmad 22 Egypt
2 John 31 USA
3 Daniel 32 Mexico
我想要的是使用问题本身而不是列名称中的代码创建一个视图,例如:
UserId What Is Your Name How old are you Where are you from
1 Ahmad 22 Egypt
2 John 31 USA
3 Daniel 32 Mexico
最好的方法是什么?任何帮助将不胜感激。
谢谢。
你描述的转轴在直线上并不容易SQL;您可以编写一些动态 SQL 来基于第一个 table 创建列名和子查询,但是这样做可能相当繁琐,并且如果您得到错了。
https://www.red-gate.com/simple-talk/sql/t-sql-programming/easier-way-pivoting-data-sql-server/; 中突出显示了一种替代方法,它是否比动态 SQL 选项更简单很大程度上取决于您的经验水平。
已更新...错过了 2016 年标签
SQL 服务器在设计上是声明式的,不支持宏替换。 这留下了 Dynamic SQL.
这是动态的工作示例SQL
Declare @tsql nvarchar(max) = N'Select top 1 * from Answers
Select @tsql = 'Select '+stuff((Select ',' +expr From (
select expr=concat(coalesce(quotename(Question),Name),'=',Name)
From sys.dm_exec_describe_first_result_set(@tsql,null,null ) A
Left Join Questions B on B.QuestionCode=A.name
) src For XML Path ('')),1,1,'')+' From Answers'
Exec(@tsql)
结果