旋转这个的语法是什么?

What's the syntax to pivot this?

我想从临时 table 中获取一组列作为一行。以下:

 select name from tempdb.sys.columns where object_id = object_id('tempdb..##myTempTable')

产生类似

的东西
|name|
------
Col1
Col2
Col3
Col4
...

我可以旋转它来获得 col1 | Col2 | Col3 | Col4 | ... ?在列中,不是作为单个值。

我不会提前知道列的名称。

 declare @cols varchar(max)=''
 declare @query varchar(max)
 select @cols=''''+name+''','+@cols from tempdb.sys.columns 
 where object_id = object_id('tempdb..##myTempTable')

 select @cols=left(@cols,len(@cols)-1)

set @query= 'select ' + @cols 

execute(@query)

如果需要名称列,请更改此行

 select @cols=''''+name+''''+ name  +','+@cols from  sys.columns 
  where object_id = object_id('hrc.dbo.car')

没有单一的语法可以以这种方式转换这些数据。

SQL 语言(适用于任何数据库) 严格要求 您在查询时 知道结果中每列的数量和类型编译时间。这是数据库引擎确定正确权限和计算执行计划所必需的。即使 SELECT * 查询也满足此要求,因为查询使用的表中列的数量和类型是固定的且已知的(至少在单个查询的生命周期内)。

这个问题要求做的事情违反了这个要求。 headers 列由数据决定,因此数据库引擎直到 查询开始执行后才能知道结果需要多少列。

解决此问题的唯一方法是将查询分为三个独立的步骤:

  1. 运行 一个更简单的查询来确定最终结果的列标题。
  2. 使用 #1 的结果即时构建新的 SQL 字符串
  3. 执行 #2 的查询,return 将结果提供给用户。