【问题标题】:How to combine multiple rows into one row when using SQL statement使用SQL语句时如何将多行合并为一行
【发布时间】:2015-02-09 22:15:01
【问题描述】:

如何将多行合并为一行?

例子:

1 infill  20
2 test2   30
3 test3   40

我想这样组合一行:

infill 20, test2 30, test4 40.

【问题讨论】:

  • 这在很大程度上取决于您使用的 DBMS。

标签: sql return


【解决方案1】:

可以使用 JOIN ;假设您的表名为 T,您可以执行 SELECT t1., t2., t3.* from T as T1, T as T2, T as T3);但很可能这不是你想要的

【讨论】:

  • 非常感谢您的回复,我还是一头雾水。
  • 1 infill 20 2 test2 30 3 test3 40 我想要一排 infill 20,test 30,test3 40 一列,请帮忙。
【解决方案2】:

您可以使用名为 lead

的 Windows 函数之一
use TSQL2012

if object_id('pract1') is not null
drop table pract1
go

create table pract1 (
id int identity(1,1) primary key,
name varchar(20) ,
number int 
)

insert into pract1(name,number)
values 
('infill',20),
('test2',30),
('test4',40)


Select concat(name,' ',number) as currentrow, 
concat( lead(name,1) over (order by id), ' ', lead(number,1) over (order by id)) as currentplusonerow,
concat( lead(name,2) over (order by id), ' ', lead(number,2) over (order by id)) as [current+2]
from pract1

currentrow  currentplusonerow   current+2
infill 20   test2 30            test4 40
test2 30    test4 40     
test4 40         

编辑:我刚刚注意到您提供了额外的评论,即您希望将所有内容都放在一个列中。然后,以下代码将为您完成:

Select concat(name,' ',number) +', '+ 
concat( lead(name,1) over (order by id), ' ', lead(number,1) over (order by id)) +', '+
concat( lead(name,2) over (order by id), ' ', lead(number,2) over (order by id)) as [desiredResult]
from pract1

有一些空格是因为,第 2 行和第 3 行没有当前行+2。

【讨论】:

  • 非常感谢 Mikajlo8。
  • 你怎么知道 OP 正在使用 SQL Server?
  • 我真的不知道,但由于 MINH 没有明确指定,我提供了 sql server 的语法,因为这是我觉得最舒服的语法。问候;-)
猜你喜欢
  • 2017-12-15
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多