我有一个类似这样的选择语句
select col1 from table1 where cond1=true
返回
之类的结果col1
_____
5
5
6
3
但是我想改变它来回报我
5-5-6-3
这可能吗?如果是这样的话?请让我知道如何做到这一点。提前感谢您的回复。
答案 0 :(得分:3)
这完全符合您的要求:
declare @ret varchar(500)
set @ret=''
select @ret = @ret + col1 + '-' from test
select substring(@ret, 1, len(@ret)-1)
注意:如果您的col1是 int ,那么我认为您必须使用 convert 或 cast 来使其 varchar < / em>的
答案 1 :(得分:3)
http://blog.shlomoid.com/2008/11/emulating-mysqls-groupconcat-function.html
SELECT my_column AS [text()]
FROM my_table
FOR XML PATH('')
答案 2 :(得分:1)
您可能可以,但为什么不在应用程序中执行此操作?我不知道你正在使用什么语言,但是在得到查询结果(伪代码)后你可以做这样的事情:
result = result.join('-')
答案 3 :(得分:0)
如果您使用的是Microsoft SQL Server,则可以使用REPLACE命令执行此操作。
SELECT col1,
dynamic_text = REPLACE(
(
SELECT
DISTINCT phone_col2 AS [data()]
FROM
table2
WHERE
condition
FOR XML PATH ('')
), '', '-')
FROM table1
WHERE condition
这样的事可能会奏效。
答案 4 :(得分:0)
我建议你在前端执行此操作,对于大量行,这将非常慢。 SQL Server的连接速度非常慢。您可以创建一个.net函数来获取表并返回字符串,这样就可以确保速度。
如果没有性能担心,就像它的一次性事情一样,请使用上面的其他解决方案,因为这些是在sql中处理的
答案 5 :(得分:0)
这也有效:
--Sample Data
DECLARE @Test TABLE
(
Col1 int
)
INSERT @Test
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5
--The query
SELECT SUBSTRING(
(
SELECT '-' + CAST(Col1 AS varchar(10))
FROM @Test
ORDER BY Col1
FOR XML PATH ('')
), 2, 2000) AS MyJoinedColumn
答案 6 :(得分:0)
试试这个:
declare @Test table (rowid int identity(1,1) primary key, col1 int not null)
insert into @test Values (5)
insert into @test Values (5)
insert into @test Values (6)
insert into @test Values (3)
declare @value varchar(500)
set @value=NULL
select @value = COALESCE(@Value+'-'+CONVERT(varchar,col1),convert(varchar,col1)) from @Test
print @value
答案 7 :(得分:0)
在MySQL下你可以轻松地做到这一点
select GROUP_CONCAT(col1 SEPARATOR '-') from table1 where cond1=true