日期:2014-05-16  浏览次数:20512 次

求一特殊SQL语句
求问如下要求,SQL语句该如何写。
假设AA表  字段为 FIELD1,FIELD2,FIELD3,FIELD4,数量  共五个字段

内容如下:
FIELD1                FIELD2            FIELD3           FIELD4        数量
 2050*700              只            左        1号位          1
 2050*700              只            左         2号位     2
 2050*700              只            左         3号位     2
 2050*800              只            左         1号位     1


要求查询结果如下:
FIELD1                FIELD2            FIELD3           FIELD4                                              数量
  2050*700           只            左        1号位,2号位2个,3号位2个     5
 2050*800              只            左         1号位                         1


目的要求:  FIELD1,FIELD2,FIELD3 相同的数量合并,FIELD4就是把别的字段的内容读取过来,如果数量不为1的话,注明数量。
想了好久,实在想不出语句,求解,谢谢。

------解决方案--------------------

SELECT FIELD1, FIELD2,FIELD3,
FIELD4=STUFF((SELECT ','+[type] FROM AA表 t WHERE FIELD1=t1.FIELD1 and FIELD2=t1.FIELD2 and FIELD3=t1.FIELD3 FOR XML PATH('')), 1, 1, ''),
sum(数量) as 数量
FROM AA表 t1
GROUP BY FIELD1, FIELD2,FIELD3

没测试
自己调下,比较简单的转换.
------解决方案--------------------
IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE o.name = 'test')
DROP TABLE test
GO

CREATE TABLE test(field1 VARCHAR(10) , field2 NVARCHAR(1) , field3 NVARCHAR(1),field4 NVARCHAR(10) , qty INT)

GO
INSERT INTO test
SELECT '2050*700' , N'只' , N'左' , N'1号位' , 1