Sql server 2008 如何在不使用临时表或变量的情况下,将MS SQL 2008 R2中的一个字段的多行合并为一行?

Sql server 2008 如何在不使用临时表或变量的情况下,将MS SQL 2008 R2中的一个字段的多行合并为一行?,sql-server-2008,rows,Sql Server 2008,Rows,如何在不使用临时表或变量的情况下实现目标 表: ID ModelNum Qty 123 ABC 4 123 DEF 4 预期结果: ID Models Qty 123 ABC | DEF 4 提前谢谢 DECLARE @T TABLE (ID INT,ModelNum CHAR(3),Qty INT) INSERT INTO @T VALUES (123,'ABC',4), (123,'DEF',4), (1

如何在不使用临时表或变量的情况下实现目标

表:

ID    ModelNum   Qty
123   ABC         4
123   DEF         4
预期结果:

ID    Models       Qty
123   ABC | DEF    4 
提前谢谢

DECLARE @T TABLE (ID INT,ModelNum CHAR(3),Qty INT)

INSERT INTO @T 
VALUES
(123,'ABC',4),
(123,'DEF',4),
(123,'GLK',4)

SELECT DISTINCT ID, STUFF(C.List, 1, 2, '') Models, Qty
FROM @T t
       CROSS APPLY (
                    SELECT '| ' + ModelNum
                    FROM @T
                    WHERE ID = t.ID
                    FOR XML PATH('')
                    )C(List)
结果集

ID  Models          Qty
123 ABC| DEF| GLK   4
结果集

ID  Models          Qty
123 ABC| DEF| GLK   4

您好,下面的查询如何:

我用不同的逻辑和属性做了相同的例子

我可以得到预期的OP,如果你对我有任何建议,请回复btechit@hotmail.com.

宣布:

@ConcatTable table (Ename varchar(30), Empno int)

Insert into @ConcatTable values ('Steve', 100),('mathew', 100),('jon', 101),('tom', 101)

--select * from @ConcatTable

--select ROW_NUMBER()over(order by Empno)Row2,* from    
--(select distinct Empno from @ConcatTable)C

declare @p varchar(100) = ''

select @p = @p+ ' '+Ename from (
select DENSE_RANK()over(order by Empno)as dens, * from @ConcatTable )A
where A.dens = 1

declare @q varchar(100) = ''

select @q = @q+ ' '+Ename from (
select DENSE_RANK()over(order by Empno)as dens, * from @ConcatTable )A
where A.dens = 2

--SELECT @p
--SELECT @q

declare @M table (Name varchar(30))

insert into @M
select * from(
select @p as v
union all
select @q as vv
)G


--SELECT ROW_NUMBER()over (order by Name desc)Rown1,* from @M

SELECT A.Name,CC.Empno FROM(
SELECT ROW_NUMBER()over (order by Name desc)Rown1,* FROM @M)A
inner join
(select ROW_NUMBER()over(order by Empno)Row2,* from
(select distinct Empno from @ConcatTable)C
)CC
on A.Rown1 = CC.Row2

您好,下面的查询如何:

我用不同的逻辑和属性做了相同的例子

我可以得到预期的OP,如果你对我有任何建议,请回复btechit@hotmail.com.

宣布:

@ConcatTable table (Ename varchar(30), Empno int)

Insert into @ConcatTable values ('Steve', 100),('mathew', 100),('jon', 101),('tom', 101)

--select * from @ConcatTable

--select ROW_NUMBER()over(order by Empno)Row2,* from    
--(select distinct Empno from @ConcatTable)C

declare @p varchar(100) = ''

select @p = @p+ ' '+Ename from (
select DENSE_RANK()over(order by Empno)as dens, * from @ConcatTable )A
where A.dens = 1

declare @q varchar(100) = ''

select @q = @q+ ' '+Ename from (
select DENSE_RANK()over(order by Empno)as dens, * from @ConcatTable )A
where A.dens = 2

--SELECT @p
--SELECT @q

declare @M table (Name varchar(30))

insert into @M
select * from(
select @p as v
union all
select @q as vv
)G


--SELECT ROW_NUMBER()over (order by Name desc)Rown1,* from @M

SELECT A.Name,CC.Empno FROM(
SELECT ROW_NUMBER()over (order by Name desc)Rown1,* FROM @M)A
inner join
(select ROW_NUMBER()over(order by Empno)Row2,* from
(select distinct Empno from @ConcatTable)C
)CC
on A.Rown1 = CC.Row2
可能的重复可能的重复