所以我有一张大约15列的表格。让我们说他们将其命名为01,02,03等,直到15岁。例如,在第4列中,它包含可包含克拉分隔符的字符串条目。因此,例如,第4列中的条目可以是' a ^ b ^ c ^ d'。我想克隆包含带有克拉分隔字符串的条目的整行,但第4列除外。我喜欢我以前的例子变成一行,每一行都包含所有相同的信息,除了第四列只包含一个a。然后是另一个列,其中包含所有相同的信息,只有第4栏中的b等等。如果有人能给我一点帮助,那么开始这真的很有帮助,谢谢!
答案 0 :(得分:0)
您可以使用:
<强> DEMO 强>
CREATE TABLE #table_name([01] NVARCHAR(100),
[02] NVARCHAR(100),
[03] NVARCHAR(100),
[04] NVARCHAR(100),
[05] NVARCHAR(100));
INSERT INTO #table_name
SELECT '1', '1', '1', 'a^b^c^d', '1'
UNION ALL
SELECT '2', '2', '2', 'e^f', '2';
;WITH cte AS
(
SELECT
[01], [02], [03], [05],
CAST('<XMLRoot><RowData>' + REPLACE([04],'^','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM #table_name
)
SELECT
[01]
,[02]
,[03]
,[04] = m.n.value('.[1]','varchar(8000)')
,[05]
FROM cte
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n);
要更改现有表格中的值,您可以使用:
<强> Demo2 强>
;WITH cte AS
(
SELECT
[01], [02], [03], [05],
CAST('<XMLRoot><RowData>' + REPLACE([04],'^','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM #table_name
)
SELECT
[01]
,[02]
,[03]
,[04] = m.n.value('.[1]','varchar(8000)')
,[05]
INTO #auxilary_table
FROM cte
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)
TRUNCATE TABLE #table_name;
INSERT INTO #table_name
SELECT *
FROM #auxilary_table;
SELECT *
FROM #table_name;