Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Sql server中将单列拆分为两列_Sql_Sql Server_Sql Server 2008_Sql Server 2008 R2_Sql Server 2012 - Fatal编程技术网

如何在Sql server中将单列拆分为两列

如何在Sql server中将单列拆分为两列,sql,sql-server,sql-server-2008,sql-server-2008-r2,sql-server-2012,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,Sql Server 2012,我有一个关于SQL Server的小问题,请告诉我如何解决这个问题 我有一个单列名为“Name”的表,我需要将其拆分为两列AgentName和Agent Value,如下所示尝试此解决方案。变量@tbl有测试数据,变量@result\u tbl有输出。我希望,这会有帮助 DECLARE @tbl TABLE (VALUE NVARCHAR(MAX)) DECLARE @result_tbl TABLE(agent_name NVARCHAR(100), VALUE NVARCHAR(MAX))

我有一个关于SQL Server的小问题,请告诉我如何解决这个问题


我有一个单列名为“Name”的表,我需要将其拆分为两列AgentName和Agent Value,如下所示

尝试此解决方案。变量@tbl有测试数据,变量@result\u 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

你可以试试下面的方法

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
希望您现在能够了解获取数据的身份,以及数据的顺序


现在执行update语句以获取AGENTID,其中的值为null,您将获得数据。

patindex函数将帮助您实现这一点。
Name
列中的“agent1”值后是否总是有3行?为什么要这样存储数据。首先,请确定这些数据来自JSON格式的网页动态网格,因此无法进行排序。@Krishnajrana Agent1或Agent2下可能有3或6个
IsNumeric
无法可靠地识别非数字数据,即VR46提供的数据,因此认为可能会有所帮助。它的实现细节。