在SQL中将一行值移动到另一行

问题描述 投票:0回答:2

我目前有一个像这样的临时表

DBName API50 CounterValue
NULL    NULL   1
test1   34.5   NULL
NULL    NULL   2
test1   38.5   NULL

我想要一个脚本,它将使我的临时表如下所示

DBName API50 CounterValue
test1   34.5   1
test1   38.5   2
sql sql-server-2008 temp-tables
2个回答
1
投票

如果您的表具有主键,并且您始终希望将CounterValue字段与表中的下一个字段相关联,则可以执行自联接:

SELECT t1.DBName, t1.API50, t2.CounterValue
FROM MyTable t1 INNER JOIN MyTable t2 ON t1.PrimaryKey -1 = t2.PrimaryKey
WHERE t1.DBName IS NOT NULL

0
投票

我喜欢AHiggins的答案,因为它解决了SQL中可能出现的问题。但是当我读到你的问题时,最初困扰我的是:为什么要在SQL中解决它?看起来数据最初并不是在数据库中创建的,而是以某种方式导入的。如果我是正确的 - 或者如果导出表格,编辑和重新导入 - 是一个选项,那么你可以用正则表达式解决这个问题。所有值得注意的文本编辑都可以为您完成此操作(我使用NotePad ++进行了测试)。

如果表格在文本文件中使用制表工具\t作为分隔符,则可以简单地替换所有

NULL\tNULL\t(.*)\n(.*)\t(.*)\tNULL

\2\t\3\t\1

© www.soinside.com 2019 - 2024. All rights reserved.