-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