27,579
社区成员
发帖
与我相关
我的任务
分享
SELECT csup_id,STUFF((SELECT '+'+LTRIM(STR(md,18,2)) FROM @t WHERE csup_id=t.csup_id FOR XML PATH('')),1,1,'') AS md FROM @t AS t GROUP BY csup_id
/*
csup_id md
20170024 -212.00+989.00
20170026 4554.00+98987.00
*/
DECLARE @t TABLE (csup_id nvarchar(50),md money)
INSERT INTO @t VALUES ('20170026',4554.00)
INSERT INTO @t VALUES ('20170024',-212.00)
INSERT INTO @t VALUES ('20170024',989.00)
INSERT INTO @t VALUES ('20170026',98987.00)
--我想得到的结果:20170026,4554.00+98987.00;20170024,-212.00+989.00
SELECT csup_id,STUFF((SELECT '+'+FORMAT(md,'0.00') FROM @t WHERE csup_id=t.csup_id FOR XML PATH('')),1,1,'') AS md FROM @t AS t GROUP BY csup_id
/*
csup_id md
20170024 -212.00+989.00
20170026 4554.00+98987.00
*/
DECLARE @t TABLE (csup_id nvarchar(50),md money)
INSERT INTO @t VALUES ('20170026',4554.00)
INSERT INTO @t VALUES ('20170024',-212.00)
INSERT INTO @t VALUES ('20170024',989.00)
INSERT INTO @t VALUES ('20170026',98987.00)
--我想得到的结果:20170026,4554.00+98987.00;20170024,-212.00+989.00
;WITH t
AS
(
SELECT *
, ROW_NUMBER() OVER (ORDER BY RAND()) AS MinRN
FROM @t)
, t2
AS
(
SELECT csup_id
, MinRN
, ROW_NUMBER() OVER (PARTITION BY csup_id ORDER BY MinRN) AS RN
FROM t)
SELECT STUFF((SELECT ';'+csup_id+','+STUFF((SELECT '+'+LTRIM(STR(md, 18, 2))
FROM @t
WHERE csup_id=t.csup_id
FOR XML PATH(''))
, 1
, 1
, '')
FROM t2 AS t
WHERE RN=1
ORDER BY MinRN
FOR XML PATH('')),1,1,'');
/*
(无列名)
20170026,4554.00+98987.00;20170024,-212.00+989.00
*/