当前位置: 代码迷 >> Sql Server >> 求1特殊SQL语句
  详细解决方案

求1特殊SQL语句

热度:56   发布时间:2016-04-24 11:04:49.0
求一特殊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 UNION all
SELECT '2050*700' , N'只' , N'左' , N'2号位' , 2 UNION all
SELECT '2050*700' , N'只' , N'左' , N'3号位' , 2 UNION all
SELECT '2050*800' , N'只' , N'左' , N'1号位' , 1 

GO

--执行查询-----------------------------
SELECT t.field1 , t.field2 , t.field3 ,
STUFF((SELECT ','+ a.field4 + CASE WHEN a.qty = 1 THEN '' ELSE CONVERT(VARCHAR , a.qty) + N'个' end from test as a where a.field1 = t.field1 and a.field2 = t.field2 and a.field3 = t.field3 for xml PATH('')),1,1,'') as field4, 
SUM(qty)  AS 数量
                                          FROM test AS t
GROUP BY t.field1 , t.field2 , t.field3
--------------------结果------------------------
field1     field2 field3 field4                         数量
---------- ------ ------ --------------------------- -----------
2050*700   只      左      1号位,2号位2个,3号位2个    5
2050*800   只      左      1号位                      1

(2 行受影响)

------解决方案--------------------
  相关解决方案