Sql server SQL:如何将行转换为列(需要另一种方法)
类似的问题有一个很好的答案 但是,提供的解决方案依赖于一个pivot,它是某种类型的ID列。如果我没有ID,并且我也不想通过创建一个带有行号的ID来减慢查询速度,该怎么办 样本数据:Sql server SQL:如何将行转换为列(需要另一种方法),sql-server,multiple-columns,rows,transpose,Sql Server,Multiple Columns,Rows,Transpose,类似的问题有一个很好的答案 但是,提供的解决方案依赖于一个pivot,它是某种类型的ID列。如果我没有ID,并且我也不想通过创建一个带有行号的ID来减慢查询速度,该怎么办 样本数据: MyDataColumn CRDB1901SAUTSVCNXMN0004666000001 CRDB1901SAUTSV CNXMN0004666 CRDB1901SAUTSVCNXMN0004683000001 CRDB1901SAUTSV CNXMN0004683 CRDB1901SAUTSVCNSHK0216
MyDataColumn
CRDB1901SAUTSVCNXMN0004666000001
CRDB1901SAUTSV
CNXMN0004666
CRDB1901SAUTSVCNXMN0004683000001
CRDB1901SAUTSV
CNXMN0004683
CRDB1901SAUTSVCNSHK021697000001
CRDB1901SAUTSV
CNSHK021697
唯一给出的是在我的列中有三个不同值的模式。因此,每4行重复一次转置。我想要这个
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;
您可以尝试如下自连接。如果我猜对了,可乐的第一部分是可乐,中间部分是可乐,最后一部分是序列号。如果上述逻辑总是正确的,那么下面的脚本应该可以满足您的需要
SELECT DISTINCT A.MyDataColumn ColA,
B.MyDataColumn ColB,
C.MyDataColumn ColC
FROM your_table A
INNER JOIN your_table B
ON A.MyDataColumn LIKE ''+B.MyDataColumn+'%'
AND A.MyDataColumn <> B.MyDataColumn
INNER JOIN your_table C
ON A.MyDataColumn LIKE '%'+C.MyDataColumn+'%'
AND A.MyDataColumn <> C.MyDataColumn
AND B.MyDataColumn <> C.MyDataColumn
关系数据库中的行没有定义的排序顺序。没有第四行这样的东西,除非您有一些列可以用于订单by@a_horse_with_no_name添加了标签-SQLServer。我正在查看PIVOT功能。必须有一种方法来指示SQL server再次以第四行为轴心:除非您对行进行排序,否则没有第四行。我在查询中添加了一个CTE以提高性能,因为我的表是一个扩展的SELECT表
ColA ColB ColC
CRDB1901SAUTSVCNSHK021697000001 CRDB1901SAUTSV CNSHK021697
CRDB1901SAUTSVCNXMN0004666000001 CRDB1901SAUTSV CNXMN0004666
CRDB1901SAUTSVCNXMN0004683000001 CRDB1901SAUTSV CNXMN0004683