Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 连接select语句中的行_Sql_Sql Server 2005 - Fatal编程技术网

Sql 连接select语句中的行

Sql 连接select语句中的行,sql,sql-server-2005,Sql,Sql Server 2005,我有一个select语句,类似这样 select col1 from table1 where cond1=true 这将返回如下结果 col1 _____ 5 5 6 3 但我想把它换回来 5-5-6-3 这可能吗?如果是,怎么做?请让我知道怎么做。提前感谢您的回复。您可能可以,但为什么不在应用程序中这样做呢?我不知道您使用的是哪种语言,但您可以在得到查询结果(伪代码)后执行类似操作: 您可能可以,但为什么不在应用程序中这样做呢?我不知道您使用的是哪种语言,但您可以在得到查询结果(伪代码

我有一个select语句,类似这样

select col1 from table1 where cond1=true
这将返回如下结果

col1
_____
5
5
6
3
但我想把它换回来

5-5-6-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。

这正是您想要的:

declare @ret varchar(500)
set @ret=''
select @ret = @ret + col1 + '-' from test

select substring(@ret, 1, len(@ret)-1)
注意:如果您的col1是int,那么我认为您必须使用convert或cast使其成为varchar。


如果您使用的是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

类似的操作可能会起作用。

如果您使用的是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

这样做可能会奏效。

我建议您在前端执行此操作,对于大量行,这将非常缓慢。SQL Server的连接速度非常慢。您可以创建一个.net函数来获取表并返回字符串,这样可以确保速度


如果没有性能方面的顾虑,比如它是一次性的等等,那么请使用上面的其他解决方案,因为这些解决方案是在sql中处理的,我建议您在前端执行此操作,对于大量行,这将非常缓慢。SQL Server的连接速度非常慢。您可以创建一个.net函数来获取表并返回字符串,这样可以确保速度

如果没有性能方面的顾虑,比如一次性解决方案等,那么可以使用上面的其他解决方案,因为这些解决方案是在sql中处理的

这同样有效:

  --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
这同样有效:

  --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
试试这个:

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
试试这个:

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

在MySQL下,您可以轻松做到这一点

select GROUP_CONCAT(col1 SEPARATOR '-') from table1 where cond1=true

在MySQL下,您可以轻松做到这一点

select GROUP_CONCAT(col1 SEPARATOR '-') from table1 where cond1=true

s但出于某些特定的原因,我想在SQL查询中这样做。但出于某些特定原因,我想在SQL查询中执行此操作。MS SQL Server中是否提供组_CONCAT?我通过谷歌搜索发现它不可用。不,GROUP_CONCAT在MS SQL Server中不可用,但上述解决方案是MS SQL的等效解决方案。GROUP_CONCAT在MS SQL Server中可用吗?我通过谷歌搜索发现它不可用。不,GROUP_CONCAT在MS SQL Server中不可用,但上面的解决方案是MS SQL的等效解决方案。这似乎是几乎完全相同的(几乎因为答案相同,而不是问题)这似乎是几乎完全相同的(几乎因为答案相同,而不是问题)