27,579
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('tempdb..#tmp_1') IS NOT NULL DROP TABLE #tmp_1
CREATE TABLE #tmp_1 (contractNo VARCHAR(10),amount DECIMAL(18,2))
INSERT INTO #tmp_1 (contractNo,amount)
VALUES('A','5'),('B','6'),('C','7'),('D','2'),('E','3'),('F','6'),('A','4'),('B','65'),('C','2'),('E','32'),('D','21'),('A','321'),('Z','365'),('A','32')
SELECT a.contractNo,a.amount
,CAST(CAST(a.amount*1.0/b.total_amount*100 AS DECIMAL(18,2)) AS VARCHAR(10))+'%' AS amount_pct
,CAST(a.amount*1.0/b.total_amount*total_amount_A AS DECIMAL(18,2)) AS amount_A
FROM (
SELECT contractNo,SUM(ISNULL(amount,0)) AS amount
FROM #tmp_1
WHERE contractNo <>'A'
GROUP BY contractNo
) a
CROSS APPLY (
SELECT SUM(ISNULL(amount,0)) AS total_amount
FROM #tmp_1
WHERE contractNo <>'A'
) b
CROSS APPLY (
SELECT SUM(ISNULL(amount,0)) AS total_amount_A
FROM #tmp_1
WHERE contractNo ='A'
) c
UNION
SELECT '合计'
,( SELECT SUM(ISNULL(amount,0)) AS total_amount
FROM #tmp_1
WHERE contractNo <>'A'
)
,''
,(
SELECT SUM(ISNULL(amount,0)) AS total_amount_A
FROM #tmp_1
WHERE contractNo ='A'
)
contractNo amount amount_pct amount_A
---------- --------------------------------------- ----------- ---------------------------------------
B 71.00 13.95% 50.50
C 9.00 1.77% 6.40
D 23.00 4.52% 16.36
E 35.00 6.88% 24.89
F 6.00 1.18% 4.27
Z 365.00 71.71% 259.59
合计 509.00 362.00