如何在Sql server中将单列拆分为两列
我有一个关于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))
我有一个单列名为“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提供的数据,因此认为可能会有所帮助。它的实现细节。