克隆大部分SQL条目

时间:2015-09-28 15:48:27

标签: sql sql-server database

所以我有一张大约15列的表格。让我们说他们将其命名为01,02,03等,直到15岁。例如,在第4列中,它包含可包含克拉分隔符的字符串条目。因此,例如,第4列中的条目可以是' a ^ b ^ c ^ d'。我想克隆包含带有克拉分隔字符串的条目的整行,但第4列除外。我喜欢我以前的例子变成一行,每一行都包含所有相同的信息,除了第四列只包含一个a。然后是另一个列,其中包含所有相同的信息,只有第4栏中的b等等。如果有人能给我一点帮助,那么开始这真的很有帮助,谢谢!

1 个答案:

答案 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;