sql语句中的连接

时间:2014-04-20 21:01:11

标签: sql sql-server

如何在一个完整的字符串中连接select语句中的所有值,以及如何为它们编号?例如

1. Name Date Price Duration Venue 
2. Name Date Price Duration Venue 
3. Name Date Price Duration Venue


SELECT Film.Title, Film.ParentControl, Program.Venue, 
       Program.Duration, Program.EndDate, Program.Seat
FROM Program 
INNER JOIN Film 
    ON Program.FilmID = Film.FilmID

我正在做一个短信应用程序,我需要在他们要求的时候向用户发送所有电影的列表,每部电影应该在整个消息中逐一列出,我该怎么办呢?

2 个答案:

答案 0 :(得分:1)

在标准SQL中,使用连接运算符构建字符串,并使用row_number()函数对行进行编号。 (但见下文......)

select row_number() over (order by Name, Date) as row_num, 
       Name || ' ' || Date || ' ' || Price || ' ' || Duration || ' ' || Venue 
from your-table-name
order by Name, Date

对于SQL Server,我认为你必须用“+”替换标准连接运算符(“||”)或使用concat()函数。

select row_number() over (order by Name, Date) as row_num, 
       concat(Name, Date, Price, Duration, Venue)
from your-table-name
order by Name, Date

这种操作通常在应用程序代码中更好。通常,使用SQL返回数据,并使用应用程序代码或报表编写器格式化数据以供显示。

答案 1 :(得分:0)

尝试以下


declare @result table(title varchar(50), parentcontrol varchar(50), venue varchar(50))
insert into @result
select 'title 1','parent control 1','venue 1'
union all
select 'title 2','parent control 2','venue 2'
union all
select 'title 3','parent control 3','venue 3'

declare @result2 table(id int identity(1,1),title varchar(50), parentcontrol varchar(50), venue varchar(50))

insert into @result2
select * from @result

declare @sql nvarchar(max)
select @sql = ''

select @sql = @sql + CAST(id as nvarchar(10))  + '. ' + title + ','
from @result2 

print @sql

你应该能够以类似的方式工作。我将结果插入到具有标识列的变量表中,以获得行号。这是在此处拥有ID标识列的唯一目的,因为您需要行号。然后我只是使用正常的SQL连接。如果我理解正确,那就是你所追求的。