首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

合并,查询出结果

2013-06-19 
合并,求一个查询出结果原始数据:字段1字段2字段3字段40125100135301a160125100135301b120160300100001a10

合并,求一个查询出结果
原始数据:
字段1  字段2           字段3        字段4
01      25100135301     a          16
01      25100135301     b          12
01      60300100001     a           10

需要的结果:
字段1字段2                 字段3             字段4
01     25100135301      a,b           16+12=28
01     60300100001      a                  10
sql
[解决办法]


DECLARE @B TABLE(col1 VARCHAR(6),col2 varchar(60),col3 varchar(6),col4 int)
INSERT INTO @B 
SELECT '01','25100135301','a',16 UNION ALL
SELECT '01','25100135301','b',12 UNION ALL
SELECT '01','60300100001','a',10


SELECT    col1,col2, 
        STUFF(
             (SELECT ', '  + CONVERT(VARCHAR(100),col3)  FROM @B T1 WHERE T1.col2 = T2.col2 FOR XML PATH('')),1,1,''
           ) AS col3,sum(col4) col4
FROM @B T2 
GROUP BY col1,col2

[解决办法]
引用:
谢谢1楼,我需求没说清楚。
原始数据是这样来的:select 字段1,字段2,字段3,字段4 from 表 where ……
后面where 的条件是用户根据需要自己定义的

所以1楼stuff里面的select也要加上一样的where条件,但是这个程序是不允许加的。因此stuff里面的查询既要关联@B表也要有跟@B一样的集合。这个不知道有没有办法

2005 及以后版本可以用with


;with B as(
  select .... from tbl where ...
)select .... from b ....




[解决办法]
引用:

DECLARE @B TABLE(col1 VARCHAR(6),col2 varchar(60),col3 varchar(6),col4 int)
INSERT INTO @B 
SELECT '01','25100135301','a',16 UNION ALL
SELECT '01','25100135301','b',12 UNION ALL
SELECT '01','60300100001','a',10


SELECT    col1,col2, 
        STUFF(
             (SELECT ', '  + CONVERT(VARCHAR(100),col3)  FROM @B T1 WHERE T1.col2 = T2.col2 FOR XML PATH('')),1,1,''


           ) AS col3,sum(col4) col4
FROM @B T2 
GROUP BY col1,col2


如果  字段3的内容是aa,aaaa 内容的话,你的sql是有问题的吧?
[解决办法]
select 字段1,字段2 ,sum(字段4) as 字段4, 字段3=stuff((select ','+字段3 from 表名 t where 字段1=表名.字段1 for xml path('')), 1, 1, '')  from 表名  
group by 字段1 ,字段2 
[解决办法]
合并,查询出结果你要的效果和下面的类似
合并,查询出结果

[解决办法]
这样的例子实在太多,楼主找一下旧帖都会有的

[解决办法]


CREATE TABLE T_CSDN_ONE
(
ID VARCHAR(20),
    COLONE VARCHAR(50),
    COLTWO VARCHAR(20),
    COLTHREE INT
)

INSERT INTO T_CSDN_ONE
SELECT '01','25100135301','a',16
UNION ALL
SELECT '01','25100135301','b',12
UNION ALL
SELECT '01','60300100001','a',10

DROP FUNCTION dbo.F_GetStringByColTwo

CREATE FUNCTION F_GetStringByColTwo(@COLONE AS VARCHAR(20))
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @COLTWO VARCHAR(20)
SET @COLTWO='';
SELECT @COLTWO= @COLTWO+(CASE @COLTWO WHEN '' THEN '' ELSE ',' END)+CASE COLTWO WHEN COLTWO THEN COLTWO END 
FROM T_CSDN_ONE WHERE COLONE=@COLONE GROUP BY COLTWO
return @COLTWO;
END


SELECT A.COLONE,
dbo.F_GetStringByColTwo(a.COLONE)
,SUM(A.COLTHREE)FROM T_CSDN_ONE A GROUP BY A.COLONE 

热点排行