问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
DECLARE
@OperatorPointCode NVARCHAR(32) = 'JCFT' ,
@OperatorCode NVARCHAR(32) = 'JCFT' ,
@PointCode NVARCHAR(32) = 'JCFT' ,
@BeginDT DATETIME='2022-2-25',
@EndDT DATETIME=NULL,
@SearchFlag INT = 0
BEGIN
IF @PointCode IS NULL OR @PointCode = ''
SET @PointCode = @OperatorPointCode
IF @BeginDT IS NULL
SET @BeginDT = '1900-01-01'
SET @BeginDT = CONVERT(NCHAR(11),@BeginDT ,120) + '00:00:00'
IF @EndDT IS NULL
SET @EndDT = GETDATE()
SET @EndDT = CONVERT(NCHAR(11),@EndDT ,120) + ' 23:59:59:998'
SELECT ROW_NUMBER() OVER(ORDER BY T.[收款单号]) AS 序号,
T.[网点号] AS 网点号,
T.[收款单号] AS 收款单号,
T.[业务单号] AS 业务单号,
T.[网点名称] AS 网点名称,
T.[业务类型] AS 业务类型,
T.[收款日期] AS 收款日期,
CAST (T.[收款金额] AS NUMERIC(15,2)) AS 收款金额,
T.[支付方式] AS 支付方式,
CAST(T.[支付金额] AS NUMERIC(15,2)) AS 支付金额
INTO #PayDetail
FROM
(
--售后维修
SELECT
T1.PointCode AS 网点号,
B.PayBillCode AS 收款单号,
T1.RepairBillCode AS 业务单号,
T_PointInfo.PointName AS 网点名称,
'售后维修' 业务类型,
CONVERT(NVARCHAR(10),ISNULL(B.BusinessDT,T2.BalanceDateTime),120) AS 收款日期,
round(ISNULL(T1.ActualMoney,0),2) AS 收款金额,
CASE WHEN ISNULL(T_TY_PayMentDetail.PayWay,'') = '' THEN '其他' ELSE ISNULL(T_TY_PayMentDetail.PayWay,'') END AS 支付方式,
CAST (ISNULL(T_TY_PayMentDetail.PayBalance,0) AS NUMERIC(15,5)) AS 支付金额
FROM T_RepairCharge T1 WITH (NOLOCK)
LEFT JOIN T_RepairBill T2 WITH(NOLOCK) ON (T1.PointCode = T2.PointCode AND T1.RepairBillCode = T2.RepairBillCode)
LEFT JOIN T_PointInfo WITH(NOLOCK) ON (T_PointInfo.PointCode = T1.PointCode)
LEFT JOIN (SELECT * FROM T_TY_PayMent WITH (NOLOCK) WHERE BillType='RepairBillPay') B ON T1.PointCode=B.PointCode AND T1.ChargeBillCode= B.BillCode
LEFT JOIN T_TY_PayMentDetail WITH (NOLOCK) ON B.PointCode=T_TY_PayMentDetail.PointCode AND B.BillCode=T_TY_PayMentDetail.BillCode AND B.BillType = T_TY_PayMentDetail.BillType
WHERE (T1.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (ISNULL(B.BusinessDT,T2.BalanceDateTime) BETWEEN @BeginDT AND @EndDT)
UNION
--备件用品
SELECT
--ROW_NUMBER() OVER(ORDER BY S1.SerialNo) 序号,
S1.PointCode AS 网点号,
B.PayBillCode AS 收款单号,
S1.SerialNo AS 业务单号,
T_PointInfo.PointName AS 网点名称,
'备件/用品销售' 业务类型,
CONVERT(NVARCHAR(10),ISNULL(B.BusinessDT,S1.PayDT),120) AS 收款日期,
CAST (ISNULL(S1.PayBalance,B.PayBalance) AS NUMERIC(15,5))AS 收款金额,
CASE WHEN ISNULL(T_TY_PayMentDetail.PayWay,'') = '' THEN '其他' ELSE ISNULL(T_TY_PayMentDetail.PayWay,'') END AS 支付方式,
CAST (ISNULL(T_TY_PayMentDetail.PayBalance,0) AS NUMERIC(15,5)) AS 支付金额
FROM T_SparepartsPaymentDetail S1 WITH (NOLOCK)
LEFT JOIN T_PointInfo WITH(NOLOCK) ON (T_PointInfo.PointCode = S1.PointCode)
LEFT JOIN (SELECT * FROM T_TY_PayMent WITH (NOLOCK) WHERE BillType='SparepartsPay') B ON S1.PointCode=B.PointCode AND S1.SerialNo= B.BillCode
LEFT JOIN T_TY_PayMentDetail WITH (NOLOCK) ON B.PointCode=T_TY_PayMentDetail.PointCode AND B.BillCode=T_TY_PayMentDetail.BillCode AND B.BillType = T_TY_PayMentDetail.BillType
LEFT JOIN
(SELECT
ROW_NUMBER() OVER(ORDER BY T1.SerialNo) 序号,T1.PointCode,T1.SerialNo
FROM T_SparepartsPaymentDetail T1 WITH (NOLOCK)
LEFT JOIN (SELECT * FROM T_TY_PayMent WITH (NOLOCK) WHERE BillType='SparepartsPay') B ON T1.PointCode=B.PointCode AND T1.SerialNo= B.BillCode
WHERE (T1.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (B.BusinessDT BETWEEN @BeginDT AND @EndDT)
)AS T_Lincode ON S1.PointCode=T_Lincode.PointCode AND S1.SerialNo=T_Lincode.SerialNo
WHERE (S1.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (ISNULL(B.BusinessDT,S1.PayDT) BETWEEN @BeginDT AND @EndDT)
UNION
--新车订单
SELECT
--ROW_NUMBER() OVER(ORDER BY C1.DestineBillCode) 序号,
C1.PointCode AS 网点号,
B.PayBillCode AS 收款单号,
C1.DestineBillCode AS 业务单号,
T_PointInfo.PointName AS 网点名称,
'新车订单' 业务类型,
CONVERT(NVARCHAR(10),ISNULL(B.BusinessDT,C1.BusinessDT),120) AS 收款日期,
CAST (ISNULL(C1.PayedeDestineMoney,B.PayBalance) AS NUMERIC(15,5))AS 收款金额,
CASE WHEN ISNULL(T_TY_PayMentDetail.PayWay,'') = '' THEN '其他' ELSE ISNULL(T_TY_PayMentDetail.PayWay,'') END AS 支付方式,
CAST (ISNULL(T_TY_PayMentDetail.PayBalance,0) AS NUMERIC(15,5)) AS 支付金额
FROM T_CS_CarSaleDestine C1 WITH (NOLOCK)
LEFT JOIN T_PointInfo WITH(NOLOCK) ON (T_PointInfo.PointCode = C1.PointCode)
LEFT JOIN (SELECT * FROM T_TY_PayMent WITH (NOLOCK) WHERE BillType='CarDestine') B ON C1.PointCode=B.PointCode AND C1.DestineBillCode= B.BillCode
LEFT JOIN T_TY_PayMentDetail WITH (NOLOCK) ON B.PointCode=T_TY_PayMentDetail.PointCode AND B.BillCode=T_TY_PayMentDetail.BillCode AND B.BillType = T_TY_PayMentDetail.BillType
WHERE (C1.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (ISNULL(B.BusinessDT,C1.BusinessDT) BETWEEN @BeginDT AND @EndDT)
UNION
--整车销售
SELECT
C2.PointCode AS 网点号,
B.PayBillCode AS 收款单号,
CS_T.SaleBillCode AS 业务单号,
T_PointInfo.PointName AS 网点名称,
'整车销售' 业务类型,
CONVERT(NVARCHAR(10),ISNULL(B.BusinessDT,CS_T.BalanceDT),120) AS 收款日期,
CAST (ISNULL(B.PayBalance,CS_T.PayedSaleTotalSale) AS NUMERIC(15,5))AS 收款金额,
CASE WHEN ISNULL(C2.PayWay,'') = '' THEN '其他' ELSE ISNULL(C2.PayWay,'') END AS 支付方式,
CAST (ISNULL(C2.PayBalance,0) AS NUMERIC(15,5)) AS 支付金额
FROM T_TY_PayMentDetail C2 WITH (NOLOCK)
LEFT JOIN T_PointInfo WITH(NOLOCK) ON (T_PointInfo.PointCode = C2.PointCode)
LEFT JOIN (SELECT * FROM T_TY_PayMent WITH (NOLOCK) WHERE BillType='CarSales') B ON C2.PointCode=B.PointCode AND C2.BillCode= B.BillCode AND B.BillType = C2.BillType
LEFT JOIN T_CS_CarSaleBillDetail CS_T WITH (NOLOCK) ON C2.PointCode=CS_T.PointCode AND C2.BillCode=CS_T.SaleBillCode
WHERE (C2.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (ISNULL(CS_T.BalanceDT,B.BusinessDT) BETWEEN @BeginDT AND @EndDT)
UNION
--客户预收款
SELECT
FI.PointCode AS 网点号,
B.PayBillCode AS 收款单号,
FI.CustomerID AS 业务单号,
T_PointInfo.PointName AS 网点名称,
'客户预存款' 业务类型,
CONVERT(NVARCHAR(10),B.BusinessDT,120) AS 收款日期,
CAST (ISNULL(B.PayBalance,FI.NoInvoiceBalance) AS NUMERIC(15,5))AS 收款金额,
CASE WHEN ISNULL(T_TY_PayMentDetail.PayWay,'') = '' THEN '其他' ELSE ISNULL(T_TY_PayMentDetail.PayWay,'') END AS 支付方式,
CAST (ISNULL(B.PayBalance,0) AS NUMERIC(15,5)) AS 支付金额
FROM T_FI_PointCustomerAccountInfo FI WITH (NOLOCK)
LEFT JOIN T_PointInfo WITH(NOLOCK) ON (T_PointInfo.PointCode = FI.PointCode)
LEFT JOIN T_FinanceCashAcount TF WITH (NOLOCK) ON FI.PointCode=TF.PointCode AND FI.CustomerID=TF.CustomerID
LEFT JOIN (SELECT * FROM T_TY_PayMent WITH (NOLOCK) WHERE BillType='RelieveType') B ON TF.PointCode=B.PointCode AND TF.BillCode= B.BillCode
LEFT JOIN T_TY_PayMentDetail WITH (NOLOCK) ON B.PointCode=T_TY_PayMentDetail.PointCode AND B.BillCode=T_TY_PayMentDetail.BillCode AND B.BillType = T_TY_PayMentDetail.BillType
WHERE (FI.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (B.BusinessDT BETWEEN @BeginDT AND @EndDT)
UNION
--电子券
SELECT
T_Pay.PointCode AS 网点号,
T_Pay.PayBillCode AS 收款单号,
T_Coupon.VolumeListNo AS 业务单号,
T_PointInfo.PointName AS 网点名称,
'电子券收款' 业务类型,
CONVERT(NVARCHAR(10),ISNULL(T_Pay.BusinessDT,T_Coupon.PayDT),120) AS 收款日期,
CAST (ISNULL(T_Pay.PayBalance,T_Coupon.PayBalance) AS NUMERIC(15,5))AS 收款金额,
CASE WHEN ISNULL(T_TY_PayMentDetail.PayWay,'') = '' THEN '其他' ELSE ISNULL(T_TY_PayMentDetail.PayWay,'') END AS 支付方式,
CAST (ISNULL(T_Pay.PayBalance,0) AS NUMERIC(15,5)) AS 支付金额
FROM T_TY_PayMent T_Pay WITH (NOLOCK)
LEFT JOIN T_TY_PayMentDetail WITH (NOLOCK) ON T_Pay.PointCode=T_TY_PayMentDetail.PointCode AND T_Pay.BillCode=T_TY_PayMentDetail.BillCode AND T_Pay.BillType = T_TY_PayMentDetail.BillType
LEFT JOIN T_PointInfo WITH(NOLOCK) ON (T_PointInfo.PointCode = T_Pay.PointCode)
LEFT JOIN T_RepairCouponInfo T_Coupon WITH(NOLOCK) ON (T_Coupon.PointCode = T_Pay.PointCode AND T_Coupon.SerialNo=T_Pay.BillCode)
WHERE (T_Pay.PointCode IN (SELECT PointCode FROM DBO.F_GetRelationPointCollection(@PointCode, 1, 1, -1 * ISNULL(@SearchFlag, 0), 1)))
AND (T_Pay.BillType='RepairCouponPay')
AND (ISNULL(T_Pay.BusinessDT,T_Coupon.PayDT) BETWEEN @BeginDT AND @EndDT)
)AS T
GROUP BY
T.网点号,
T.[收款单号] ,
T.[业务单号] ,
T.[网点名称],
T.[业务类型] ,
T.[收款日期],
T.[收款金额] ,
T.[支付方式],
T.[支付金额]
SELECT *
FROM #PayDetail
UNION ALL
SELECT NULL 序号,
NULL AS 网点号,
NULL AS 收款单号,
NULL AS 业务单号,
NULL AS 网点名称,
NULL AS 业务类型,
NULL AS 收款日期,
SUM([收款金额]),
[支付方式],
SUM([支付金额])
FROM #PayDetail
GROUP BY [支付方式]
DROP TABLE #PayDetail
END
运行结果及报错内容
我的解答思路和尝试过的方法
使用临时表写入,未能达到效果。
我想要达到的结果
合计为一行数据,不需要进行分组显示。