SQL:如何将行转置为列(需要另一种方法)

SQL: how to transpose rows into columns (another approach needed)

类似问题有一个很好的答案

但是,所提供的解决方案依赖于 "pivot",它是某种 ID 列。如果我没有 ID,而且我也不一定想通过使用 ROW_NUMBER() 创建一个 ID 来减慢查询速度怎么办。

示例数据:

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

上遇到 "cannot be bound" 错误
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;

您可以尝试自行加入,如下所示。如果我猜对了,COLA 的第一部分是 COLB,COLA 的中间部分是 COLC,最后 COLA 的最后部分是序列号。如果以上逻辑始终为真,则以下脚本应该可以满足您的目的。

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

输出是-

ColA                                ColB            ColC
CRDB1901SAUTSVCNSHK021697000001     CRDB1901SAUTSV  CNSHK021697
CRDB1901SAUTSVCNXMN0004666000001    CRDB1901SAUTSV  CNXMN0004666
CRDB1901SAUTSVCNXMN0004683000001    CRDB1901SAUTSV  CNXMN0004683