【发布时间】:2014-12-11 14:00:14
【问题描述】:
我有这样的情况
+---------+-----------+------------+
| FieldNo | FieldName | Substring |
+---------+-----------+------------+
| 1 | A | 8 |
| 1 | A | A |
| 1 | A | DC |
| 2 | B | 7 |
| 3 | C | 22 |
| 3 | C | 37 |
+---------+-----------+------------+
需要这样的输出:
+----+------+------+
| A | B | C |
+----+------+------+
| 8 | 7 | 22 |
| A | Null | 37 |
| DC | Null | Null |
+----+------+------+
有什么建议可以在 SQL Server 中做到这一点吗?
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Field_name)
from bear_crossjoin
group by FIELD_NAME, FIELDNUMBER
order by FIELDNUMBER
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ' + @cols + N' from
(
select substring, Field_name
from bear_crossjoin
) x
pivot
(
max(substring)
for field_name in (' + @cols + N')
) p '
exec sp_executesql @query
【问题讨论】:
-
只需搜索
SQL Server和PIVOT。如果您有具体问题,请随时询问 -
我需要在顶部的字段名 A、B、C。上面的示例将其作为行而不是列。
-
你检查过任何关于 PIVOT 的类似问题吗?你对他们有意见吗?
-
@Arun.K 您可以使用
row_number()技巧以及我的答案here,其中包括一个动态解决方案。基本上,您需要创建一个 sql 字符串,该字符串将执行并为您提供最终结果。 -
@Arun.K - 代码只需稍作改动即可工作 - 请参阅此演示 - sqlfiddle.com/#!3/5396ed/5
标签: sql-server stored-procedures pivot