【发布时间】:2019-12-26 08:27:57
【问题描述】:
类似问题here有一个很好的答案。
但是,所提供的解决方案依赖于“枢轴”,它是某种 ID 列。如果我没有 ID 怎么办,而且我也不一定想通过使用ROW_NUMBER() 创建一个 ID 来减慢查询速度。
样本数据:
MyDataColumn
CRDB1901SAUTSVCNXMN0004666000001
CRDB1901SAUTSV
CNXMN0004666
CRDB1901SAUTSVCNXMN0004683000001
CRDB1901SAUTSV
CNXMN0004683
CRDB1901SAUTSVCNSHK021697000001
CRDB1901SAUTSV
CNSHK021697
唯一给定的是我的列中存在三个不同值的模式。所以每第四行重复转置。我想要这个。。
COLA COLB COLC
CRDB1901SAUTSVCNXMN0004666000001 CRDB1901SAUTSV CNXMN0004666
CRDB1901SAUTSVCNXMN0004683000001 CRDB1901SAUTSV CNXMN0004683
CRDB1901SAUTSVCNSHK021697000001 CRDB1901SAUTSV CNSHK021697
etc
这是我的尝试,但在 src.ManifestID 上出现“无法绑定”错误
select src.ManifestID, [1], [2], [3]
from
(
SELECT a.Token AS ManifestID
FROM VisitManifests AS vm
CROSS APPLY dbo.fnTokenizer(vm.Note, ':') AS a
WHERE CHARINDEX('Manifest ID:', vm.Note) > 0
AND CHARINDEX('Message ID:', vm.Note) > 0
AND CHARINDEX('Manifest ID:', vm.Note) < CHARINDEX('Message ID:', vm.Note)
AND a.Token > 1
) as src
pivot
(
max(src.ManifestID)
for ManifestID in ([1],[2],[3])
) piv;
【问题讨论】:
-
关系数据库中的行没有定义的排序顺序。没有“第四行”之类的东西,除非你有一些列可以用于
order by -
@a_horse_with_no_name 添加了标签 - SQL 服务器。我正在查看 PIVOT 功能。必须有一种方法可以“指示” SQL Server 以第 4 行为轴
-
再说一遍:没有像“第 4 行”这样的东西除非你有东西可以对这些行进行排序。
标签: sql-server multiple-columns rows transpose