Sql server T-SQL数据转换
我有这样一个结果集: ID Value 1 100 2 50 3 200 4 30 - - - - ID值 1 100 2 50 3 200 4 30 - - - - 我希望将其转换为以下内容: Value1 Value2 100 50 200 30 - - - - 价值1价值2 100 50 200 30 - - - - 如何使用T-SQL执行此操作?使用以下方法:Sql server T-SQL数据转换,sql-server,tsql,Sql Server,Tsql,我有这样一个结果集: ID Value 1 100 2 50 3 200 4 30 - - - - ID值 1 100 2 50 3 200 4 30 - - - - 我希望将其转换为以下内容: Value1 Value2 100 50 200 30 - - - - 价值1价值2 100 50 200 30 - - - - 如何
select a.Value, b.Value
from
(
select row_number() over(order by ID) [rn], Value
from @t
)a
left join
(
select row_number() over(order by ID) [rn], Value
from @t
)b on b.rn = a.rn + 1
where a.rn % 2 = 1
样本数据:
declare @t table (ID int, Value int)
insert @t values (1,100), (2,50), (3,200), (4,30)
输出:
Value Value
----------- -----------
100 50
200 30
使用以下命令:
select a.Value, b.Value
from
(
select row_number() over(order by ID) [rn], Value
from @t
)a
left join
(
select row_number() over(order by ID) [rn], Value
from @t
)b on b.rn = a.rn + 1
where a.rn % 2 = 1
样本数据:
declare @t table (ID int, Value int)
insert @t values (1,100), (2,50), (3,200), (4,30)
输出:
Value Value
----------- -----------
100 50
200 30
ID是否保证是连续的(它们之间没有间隙)?请更详细地描述您试图实现的目标,以及您使用的SQL版本。ID从1开始是连续的,没有间隙。我使用SOL Server 2005如果您的序列没有间隙,@t-clausen.dk解决方案更合适。是否保证ID是连续的(它们之间没有间隙)?请更详细地描述您试图实现的目标,以及您使用的SQL版本。ID从1开始连续且没有间隙。我使用SOL Server 2005如果您的序列没有间隙,@t-clausen.dk解决方案更合适。请左键连接而不是右键连接?尝试使用5行,如我的示例中所示。@t-clausen.dk,当然可以,但这可能取决于任务。。。我更新了我的答案:-)你得到了荣誉才是公平的,因为有很多关于身份证没有口吃的信息,我只是假设没有。您的代码会考虑到这一点。但是如果没有gabs,他应该使用我的解决方案,因为性能(如您所提到的)。@t-clausen.dk,是的,我写了一篇文章,认为只要没有差距,t-clausen.dk解决方案也很好。但我选择的另一个解决方案至少可以防止这种类型的错误,以防ID中出现漏洞。Left join而不是join?尝试使用5行,如我的示例中所示。@t-clausen.dk,当然可以,但这可能取决于任务。。。我更新了我的答案:-)你得到了荣誉才是公平的,因为有很多关于身份证没有口吃的信息,我只是假设没有。您的代码会考虑到这一点。但是如果没有gabs,他应该使用我的解决方案,因为性能(如您所提到的)。@t-clausen.dk,是的,我写了一篇文章,认为只要没有差距,t-clausen.dk解决方案也很好。但我选择的另一个解决方案至少可以防止这种类型的bug,以防IDs中出现漏洞。