求问如下要求,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 行受影响)
------解决方案--------------------