-1

我對SQL Server有個小問題,請告訴我如何解決這個問題。如何在Sql服務器中將單列拆分爲兩列

enter image description here

我有一列名「名」的表,我需要分割到這兩個欄目AGENTNAME和代理值如下圖所示

+1

patindex函數將幫助你做到這一點。 –

+1

「Name」列中的「agent1」值總是有3行? –

+2

爲什麼你要存儲這樣的數據。將這些數據排在第一位 –

回答

0

你可以試試下面的

Select IDENTITY(int, 1,1) AS ident, 
     case IsNumeric(Agent) 
     when 1 then Agent 
     else null end ValueField, 
     case IsNumeric(Agent) 
     when 0 then Agent 
     else null end AgentId 
from yourAgentTable 

但不要期望的結果是像你如何問

你會得到答案,就像

---------------------------------------------------- 
Ident   |  ValueField  | Agent 
---------------------------------------------------- 
1     null     Agent1 
2      1     null 
3      2     null 
4      3     null 
5     null     Agent2 
6      4     null 
7      5     null 
8      6     null 

希望現在您應該擁有您獲取數據的身份以及其順序如何,

現在執行更新聲明以獲取其ID爲null的代理標識,並且您將獲得您的數據。

+3

'IsNumeric'不是**可靠的**來識別非數字數據 –

+2

這是數據鑑於VR46所以認爲可以幫助。它的再次實施細節。 – bhushanvinay

2

嘗試這種解決方案。變量@tbl具有測試數據,變量@result_tbl將具有輸出。我希望這有幫助。

DECLARE @tbl TABLE (VALUE NVARCHAR(MAX)) 
DECLARE @result_tbl TABLE(agent_name NVARCHAR(100), VALUE NVARCHAR(MAX)) 

DECLARE @value NVARCHAR(MAX), 
     @agent_name NVARCHAR(100) 

INSERT INTO @tbl 
SELECT 'Agent1' 
UNION ALL 
SELECT '1' 
UNION ALL 
SELECT '2' 
UNION ALL 
SELECT '3' 
UNION ALL 
SELECT 'Agent2' 
UNION ALL 
SELECT '4' 
UNION ALL 
SELECT '5' 
UNION ALL 
SELECT 'Agent3' 
UNION ALL 
SELECT '6' 

DECLARE cur CURSOR FOR SELECT * FROM @tbl AS T 
OPEN cur 
FETCH NEXT FROM cur INTO @value 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    IF @value LIKE 'Agent%' 
    BEGIN 
     SET @agent_name = @value 
     FETCH NEXT FROM cur INTO @value 
    END 

    INSERT INTO @result_tbl 
    VALUES(@agent_name, @value) 

    FETCH NEXT FROM cur INTO @value 
END 

CLOSE cur 
DEALLOCATE cur 

SELECT * FROM @result_tbl 
+0

超級,它的工作,非常感謝你..... – Sunil