SQL Server:透视帮助/从前缀+;来自另一列的值

SQL Server:透视帮助/从前缀+;来自另一列的值,sql,sql-server,Sql,Sql Server,我有一个相当长的SQL查询,希望根据另一列的内容动态构建一些列名。我正在使用SQL Server 2012。有没有一种简单的方法可以在不动态构建整个查询的情况下实现这一点?我是SQL的新手,我希望做如下工作: 从下表开始: |A|B|C|D| --------- p 1 x l p 2 y m q 1 x l q 2 y m |A|C1|C2|D1|D2| --------------- p x y l m q x y l m 在此表中: |A|B|C|D| ----

我有一个相当长的SQL查询,希望根据另一列的内容动态构建一些列名。我正在使用SQL Server 2012。有没有一种简单的方法可以在不动态构建整个查询的情况下实现这一点?我是SQL的新手,我希望做如下工作:

从下表开始:

|A|B|C|D|
---------
 p 1 x l
 p 2 y m
 q 1 x l
 q 2 y m
|A|C1|C2|D1|D2|
---------------
 p x  y  l  m
 q x  y  l  m
在此表中:

|A|B|C|D|
---------
 p 1 x l
 p 2 y m
 q 1 x l
 q 2 y m
|A|C1|C2|D1|D2|
---------------
 p x  y  l  m
 q x  y  l  m
通过旋转B上的C列和D列,并通过将某些前缀与B列中的值连接在一起来命名它们。但是,对于我的SQL技能来说,找不到任何看起来不太复杂的东西


我会满足于能够对列进行硬编码,然后根据列B中的值动态命名它们。

您正在尝试这样做吗

SELECT  
    CurrentMonthAndYear = CONCAT('Month_', MONTH(GETDATE()))
产生

CurrentMonthAndYear 
-------------------
Month_5

从今天(2014年5月)起。

您所说的“构造两个[几个]列名”是什么意思?显示您的表结构和所需的输出会很有帮助。我喜欢将列别名视为等同于变量名:您创建的标识符应该保持不变。所以我会问你为什么想要这个,并思考解决真正问题的替代方案。例如,在本例中,您可以从查询中返回两列,然后在调用应用程序/处理中对它们执行任何需要的操作。我将调用此列
Month\u CurrentDate
,然后让应用程序处理它。我能想到的动态更改列名的唯一方法是将其构建为动态sql。我试图让它尽我所能的简单,而只是把它弄错了。