2011-02-10 46 views
0

我有一個表的數據作爲提取表數據值

col1 col2 col3 col4 
11  12  xx yy 20 
22  13  qq aa 21 

我的TDD使用TSQL作爲

col1  col2 col3 col4 
11  12  xx  20 
11  12  yy  20 
22  13  qq  21 
22  13  aa  21 

基本上requried,COL3是具有空間值,需要創建用空格值分隔的每個值的行。

感謝 prav

+0

是第3列是否一致? 2個字符後跟一個空格,然後是兩個字符?如果是這樣,那麼你的解決方案很簡單 - 兩個插入使用第三列的子字符串。如果沒有,你必須做一些更復雜的事情 - 比如使用一個計數表來找到空間兩側的值 – jlnorsworthy 2011-02-10 05:06:08

回答

2

看一看像這樣

DECLARE @Table TABLE(
     col1 INT, 
     col2 INT, 
     col3 VARCHAR(50), 
     col4 INT 
) 

INSERT INTO @Table SELECT 11,12,'xx yy',20 
INSERT INTO @Table SELECT 22,13,'qq aa',21 

;WITH Vals AS (
    SELECT *, 
      CAST('<d>' + REPLACE(col3, ' ', '</d><d>') + '</d>' AS XML) XMLCol 
    FROM @Table 
) 
SELECT Vals.*, 
     T.split.value('.', 'VARCHAR(MAX)') SplitValue 
FROM Vals 
CROSS APPLY 
     XMLCol.nodes('/d') T(split) 
+0

我不夠好用XML來知道這個編譯和運行是否符合你的要求,但如果它確實 - 那麼很好! – jlnorsworthy 2011-02-10 05:07:59