WITH #start AS (SELECT 1 AS 'A') ,#行转列 AS ( SELECT T.* FROM ( SELECT t0.FBILLNO,t0.FID,tt.合同金额,t0p.FRECADVANCERATE,t0p.F_CYG_TEXT FROM 销售合同_20240523 tt INNER JOIN T_CRM_CONTRACT t0 on t0.FBILLNO = tt.单据编号 INNER JOIN T_CRM_CONTRACTPLAN t0p on t0.FID = t0p.FID ) t0 PIVOT ( SUM(t0.FRECADVANCERATE) FOR t0.f_CYG_TEXT IN ([预付],[发货],[到货],[验收],[质保]) ) AS T ) ,#列转行 AS ( SELECT *,upvt.比例 * upvt.[合同金额] /100 AS '比例金额' FROM ( SELECT tt.单据编号 ,t0.FID ,tt.[合同金额] ,tt.[预付款] AS [预付] ,tt.[发货款] AS [发货] ,tt.[到货款] AS [到货] ,tt.[验收款] AS [验收] ,tt.[质保金] AS [质保] FROM 销售合同_202406181021 tt INNER JOIN T_CRM_CONTRACT t0 on tt.单据编号 = t0.FBILLNO ) t0 UNPIVOT (比例 FOR 节点 IN ([预付],[发货],[到货],[验收],t0.[质保])) upvt ) ,#最终 AS ( SELECT tt.* ,t0p.FRECADVANCERATE,t0p.FRECADVANCEAMOUNT,t0p.FENTRYID FROM #列转行 tt INNER JOIN T_CRM_CONTRACTPLAN t0p on tt.FID = t0p.FID AND t0p.F_CYG_TEXT = tt.节点 ) SELECT * FROM #最终 --UPDATE t0p SET t0p.FRECADVANCERATE = tt.比例 -- ,t0p.FRECADVANCEAMOUNT = tt.比例金额 --FROM T_CRM_CONTRACTPLAN t0p -- INNER JOIN #最终 tt on tt.FENTRYID = t0p.FENTRYID --WHERE tt.FENTRYID = t0p.FENTRYID