Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 T-SQL数据转换_Sql Server_Tsql - Fatal编程技术网

Sql server 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 - - - - 如何

我有这样一个结果集:

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执行此操作?

使用以下方法:

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中出现漏洞。