我想将表的primaryID作为字符串与sum值连接。请参阅下文。
表格结构
ID | Value
_______________
1 | 5000
_______________
2 | 6000
_______________
3 | 7000
_______________
4 | 9000
查询我想要的结果
ALLID | ALLValue
___________________
1,2,3,4 | 27000
如何编写sql查询以产生上层结果?谢谢大家。
答案 0 :(得分:1)
在SQL Server中,对于字符串聚合,您可以使用XML逻辑。以下是您的查询示例:
select stuff((select ',' + cast(id as varchar(255)
from structure s
for xml path ('')
), 1, 1, '') as AllId,
sum(value) as AllValue
from structure s;
请注意,外部查询是一个只返回一行的聚合查询(因为sum(value)
)。初始子查询与外部查询不相关,因此它会将所有id
组合成一个字符串。
答案 1 :(得分:0)
使用FOR XML PATH
进行连接
SELECT
ALLID =
STUFF((
SELECT ',' + CONVERT(VARCHAR(10), ID)
FROM temp
FOR XML PATH('')
),1,1,''),
AllValue = SUM(Value)
FROM temp
答案 2 :(得分:0)
DECLARE @T1 TABLE
(
Id INT,
value INT
);
INSERT INTO @T1
VALUES (1,
5000);
INSERT INTO @T1
VALUES (2,
6000);
INSERT INTO @T1
VALUES (3,
7000);
INSERT INTO @T1
VALUES (4,
9000);
SELECT stuff((SELECT ',' + cast(id AS VARCHAR(255))
FROM @t1 s
FOR xml path ('')), 1, 1, '') AS AllId,
sum(value) AS AllValue
FROM @T1 s;
答案 3 :(得分:0)
SELECT substring((
SELECT ',' + CONVERT(VARCHAR(10),ID)
FROM tbl1
FOR XML PATH('')
),2,2000) as ALLID ,
AllValue = SUM(Value)
FROM tbl1
答案 4 :(得分:0)
Try this without using XML PATH
CREATE TABLE #TEMP
(
ID INT,
VALUE INT
)
INSERT INTO #TEMP
VALUES (1,5000),
(2,6000),
(3,7000),
(4,9000)
DECLARE @ID VARCHAR(MAX),
@VALUE INT
SET @ID = ''
SELECT @ID = @ID + CONVERT(VARCHAR(2), ID) + ','
FROM #TEMP
SET @ID=(SELECT SUBSTRING(@ID, 1, LEN(@ID) - 1))
SET @VALUE=(SELECT SUM(VALUE)
FROM #TEMP)
SELECT @ID ALLID,@VALUE ALLVALUE
output: ALLID ALLVALUE
1,2,3,4 27000
答案 5 :(得分:0)
这个怎么样。
DECLARE @a VARCHAR(50)='',@sum INT=0
SELECT @a += CONVERT(VARCHAR(50), Id) + ',',
@sum += Sum(value)
FROM @T1
GROUP BY CONVERT(VARCHAR(50), Id)
SELECT LEFT(@a, Len(@a) - 1) ALLID,
@sum ALLValue