如何用另一个 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)

结果