旋转这个的语法是什么?
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 的结果即时构建新的 SQL 字符串
- 执行 #2 的查询,return 将结果提供给用户。
我想从临时 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 的结果即时构建新的 SQL 字符串
- 执行 #2 的查询,return 将结果提供给用户。