如何在Sql server

时间:2015-12-25 14:38:15

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我对SQL Server有一个小问题,请告诉我如何解决这个问题。

enter image description here

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

希望现在您应该拥有获取数据的身份以及数据的顺序,

现在执行更新语句以获取其值为null的AgentIds,并且您将获得数据。