我有一个表,其中一列包含特定进程的不同备注。
有时是1个注释,有时是4个不同的注释。
它看起来像这样:
Remarks
|180|
|180|
|180|
|180|360|
|180|
|180|
|180|
|180|360|
我需要把注释放在不同的列中。
我在一些注释中看起来很具体,所以我可以为每个列创建一个case。
你能告诉我如何提取或查找元组中的数字吗?
SQL Server 2016及以上版本:
;WITH shattered AS
(
SELECT t.Remarks, j.[key], j.value
FROM dbo.TheTable AS t
CROSS APPLY
OPENJSON('["' + REPLACE(t.Remarks, '|', '","') + '"]') AS j
WHERE j.value > ''
)
SELECT Remarks,
Remark1 = [1],
Remark2 = [2],
Remark3 = [3],
Remark4 = [4]
FROM shattered
PIVOT (MAX(value) FOR [key] IN ([1],[2],[3],[4])) AS p;
- db<例子;在小提琴
您可以在现代版本的SQL Server上使用STRING_SPLIT
和PIVOT
SELECT
Remarks.*
FROM YourTable t
CROSS APPLY (
SELECT *
FROM (
SELECT
s.value,
rn = CONCAT('Remarks', ROW_NUMBER() OVER (ORDER BY (SELECT NULL)))
FROM STRING_SPLIT(t.Remarks, '|') s
WHERE s.value <> ''
) s
PIVOT (
MAX(value) FOR (rn IN
(Remarks1, Remarks2, Remarks3, Remarks4)
) p
) Remarks;