云星空 应收款账龄分析取数SQL

云星空 应收款账龄分析取数SQL,应收款账龄来源于 业务应收单、应收收款核销金额、应付付款核销单 应收单单据ID=核销单源单ID与应收单行ID=核销单源行ID 业务应收单应收款金额-应收收款核销金额-应付付款核销金额<>0的数据。AR_RECEIVABLE

收款单未完成核销的收款明细,金额取负数 AR_RECEIVEBILL

收款退款单未完成核销的退款明细 AR_REFUNDBILL

其他应收单未完成收款核销的明细 AR_OtherRecAble

sql 复制代码
SELECT 'AR_RECEIVABLE' FFORMID,t1.FBILLNO,
       t1.FSALEORGID,
       t1.FCUSTOMERID,
       CONVERT(NUMERIC(18, 2)
	           ,SUM(ISNULL(t3.FPAYAMOUNTFOR, 0) - ISNULL(AP_MatchLog.fcurwrittenoffamountfor, 0) - ISNULL(AR_MatchLog.FCURWRITTENOFFAMOUNTFOR, 0)) 
			   ) FPAYAMOUNTFOR,
       CONVERT(NUMERIC(18, 2)
	           ,SUM(ISNULL(t3.FPAYAMOUNT, 0) - ISNULL(AP_MatchLog.fcurwrittenoffamount, 0)- ISNULL(AR_MatchLog.FCURWRITTENOFFAMOUNT, 0))
			   ) FPAYAMOUNT,
       t1.FCURRENCYID,
       t1.F_BHR_NDQ_DATE
FROM T_AR_RECEIVABLE t1
    LEFT JOIN T_AR_RECEIVABLEFIN t2
        ON t1.FID = t2.FID
    LEFT JOIN T_AR_RECEIVABLEPLAN t3
        ON t1.FID = t3.FID
    LEFT JOIN T_BD_CUSTOMER CUST
        ON t1.FCUSTOMERID = CUST.FCUSTID
    LEFT JOIN
    (
        SELECT AR_Datas.FSOURCEFROMID,
               AR_Datas.FSRCBILLID,
               AR_Datas.FSRCROWID,
               ISNULL(SUM(AR_Datas.FCURWRITTENOFFAMOUNTFOR), 0) FCURWRITTENOFFAMOUNTFOR,
               ISNULL(SUM(AR_Datas.FCURWRITTENOFFAMOUNT), 0) FCURWRITTENOFFAMOUNT
        FROM
        (
            SELECT PayLogEntry.FSOURCEFROMID,
                   FSRCBILLID,
                   FSRCROWID,
                   PayLogEntry.FCURWRITTENOFFAMOUNTFOR,
                   PayLogEntry.FCURWRITTENOFFAMOUNT
            FROM T_AR_RECMACTHLOG PayLog
                INNER JOIN T_AR_RECMACTHLOGENTRY PayLogEntry
                    ON PayLog.FID = PayLogEntry.FID
            WHERE PayLogEntry.FSOURCEFROMID = 'AR_receivable'
        ) AR_Datas
        GROUP BY AR_Datas.FSOURCEFROMID,
                 AR_Datas.FSRCBILLID,
                 AR_Datas.FSRCROWID
    ) AR_MatchLog
        ON t1.FID = AR_MatchLog.FSRCBILLID
           AND t3.FENTRYID = AR_MatchLog.FSRCROWID
    LEFT JOIN
    (
        SELECT AP_Datas.FSOURCEFROMID,
               AP_Datas.FSRCBILLID,
               AP_Datas.FSRCROWID,
               ISNULL(SUM(AP_Datas.FCURWRITTENOFFAMOUNTFOR), 0) fcurwrittenoffamountfor,
               ISNULL(SUM(AP_Datas.FCURWRITTENOFFAMOUNT), 0) fcurwrittenoffamount
        FROM
        (
            SELECT PayLogEntry.FSOURCEFROMID,
                   FSRCBILLID,
                   FSRCROWID,
                   PayLogEntry.FCURWRITTENOFFAMOUNTFOR,
                   PayLogEntry.FCURWRITTENOFFAMOUNT
            FROM T_AP_PAYMATCHLOG PayLog
                INNER JOIN T_AP_PAYMATCHLOGENTRY PayLogEntry
                    ON PayLog.FID = PayLogEntry.FID
            WHERE PayLogEntry.FSOURCEFROMID = 'AR_receivable'
        ) AP_Datas
        GROUP BY AP_Datas.FSOURCEFROMID,
                 AP_Datas.FSRCBILLID,
                 AP_Datas.FSRCROWID
    ) AP_MatchLog
        ON t1.FID = AP_MatchLog.FSRCBILLID
           AND t3.FENTRYID = AP_MatchLog.FSRCROWID
WHERE t1.FDOCUMENTSTATUS = 'C'
      AND CUST.FCORRESPONDORGID = 0
GROUP BY t1.FSALEORGID,
         t1.FCUSTOMERID,
         t1.FCURRENCYID,
         t1.F_BHR_NDQ_DATE
		 ,t1.FBILLNO
HAVING SUM(ISNULL(t3.FPAYAMOUNTFOR, 0) - ISNULL(AP_MatchLog.fcurwrittenoffamountfor, 0)
           - ISNULL(AR_MatchLog.FCURWRITTENOFFAMOUNTFOR, 0)
          ) <> 0
UNION ALL
SELECT 'AR_RECEIVEBILL' FFORMID,t1.FBILLNO,
       t1.FSETTLEORGID FSALEORGID,
       t1.FCONTACTUNIT,
       /*收款单.表体.应收款金额-应收收款核销记录.本次核销金额*/
       -1 * SUM(ISNULL(t2.FRECTOTALAMOUNTFOR, 0) - ISNULL(t17.fcurwrittenoffamountfor, 0)) FPAYAMOUNTFOR,
       -1 * SUM(ISNULL(t2.FRECTOTALAMOUNT, 0) - ISNULL(t17.fcurwrittenoffamount, 0)) FPAYAMOUNT,
       t1.FCURRENCYID,
       t1.FDATE
FROM T_AR_RECEIVEBILL t1 /*收款单*/
    LEFT JOIN T_AR_RECEIVEBILLENTRY t2
        ON t1.FID = t2.FID /*收款单明细*/
    LEFT JOIN T_BD_CUSTOMER_L t4
        ON t4.FCUSTID = t1.FCONTACTUNIT
           AND t4.FLOCALEID = 2052
    LEFT JOIN T_ORG_ORGANIZATIONS_L t5
        ON t1.FSETTLEORGID = t5.FORGID
           AND t5.FLOCALEID = 2052
    LEFT JOIN T_BD_CUSTOMER t10
        ON t4.FCUSTID = t10.FCUSTID
    LEFT JOIN T_BD_CUSTOMERGROUP_L t11
        ON t10.FPRIMARYGROUP = t11.FID
           AND t11.FLOCALEID = 2052
    LEFT JOIN
    (
        SELECT AR_data.FSOURCEFROMID,
               AR_data.FSRCBILLID,
               AR_data.FSRCROWID,
               ISNULL(SUM(AR_data.FCURWRITTENOFFAMOUNTFOR), 0) fcurwrittenoffamountfor,
               ISNULL(SUM(AR_data.FCURWRITTENOFFAMOUNT), 0) fcurwrittenoffamount
        FROM
        (
            SELECT LogEntry.FSOURCEFROMID,
                   FSRCBILLID,
                   LogEntry.FSRCROWID,
                   LogEntry.FCURWRITTENOFFAMOUNTFOR,
                   LogEntry.FCURWRITTENOFFAMOUNT
            FROM T_AR_RECMACTHLOG PayLog
                INNER JOIN T_AR_RECMACTHLOGENTRY LogEntry
                    ON PayLog.FID = LogEntry.FID
            WHERE LogEntry.FSOURCEFROMID = 'AR_RECEIVEBILL'
        ) AR_data /*应收收款核销 收款单*/
        GROUP BY AR_data.FSOURCEFROMID,
                 AR_data.FSRCBILLID,
                 AR_data.FSRCROWID
    ) t17
        ON t1.FID = t17.FSRCBILLID
           AND t2.FENTRYID = t17.FSRCROWID
WHERE t1.FDOCUMENTSTATUS = 'C'
      AND t10.FCORRESPONDORGID = 0
-- AND t1.FCONTACTUNIT=106473
GROUP BY t1.FSETTLEORGID,
         t1.FCONTACTUNIT,
         t1.FCURRENCYID,
         t1.FDATE
		 ,t1.FBILLNO
HAVING SUM(ISNULL(t2.FRECTOTALAMOUNTFOR, 0) - ISNULL(t17.fcurwrittenoffamountfor, 0)) <> 0
UNION ALL
SELECT 'AR_REFUNDBILL' FFORMID,t1.FBILLNO,
       FSETTLEORGID,
       FCONTACTUNIT,
       SUM(ISNULL(t2.FREFUNDAMOUNTFOR, 0) - ISNULL(t3.fcurwrittenoffamountfor, 0)) FPAYAMOUNTFOR,
       SUM(ISNULL(t2.FREFUNDAMOUNT, 0) - ISNULL(t3.fcurwrittenoffamount, 0)) FPAYAMOUNT,
       t1.FCURRENCYID,
       t1.FDATE
FROM T_AR_REFUNDBILL t1
    INNER JOIN T_AR_REFUNDBILLENTRY t2
        ON t1.FID = t2.FID
    INNER JOIN T_AR_REFUNDBILL_O t1_O
        ON t1.FID = t1_O.FID
    INNER JOIN T_CN_RECPAYPURPOSE purpose
        ON (
               t2.FPURPOSEID = purpose.FID
               AND purpose.FFINMANEGEMENT = '1' /*计入往来*/
           )
    LEFT JOIN T_BD_CUSTOMER t10
        ON t1.FCONTACTUNIT = t10.FCUSTID
    LEFT OUTER JOIN
    (
        SELECT data.FSOURCEFROMID,
               data.FSRCBILLID,
               data.FSRCROWID,
               ISNULL(SUM(data.FCURWRITTENOFFAMOUNTFOR), 0) fcurwrittenoffamountfor,
               ISNULL(SUM(data.FCURWRITTENOFFAMOUNT), 0) fcurwrittenoffamount
        FROM
        (
            SELECT LogEntry.FSOURCEFROMID,
                   FSRCBILLID,
                   LogEntry.FSRCROWID,
                   LogEntry.FCURWRITTENOFFAMOUNTFOR,
                   LogEntry.FCURWRITTENOFFAMOUNT
            FROM T_AR_RECMACTHLOG PayLog
                INNER JOIN T_AR_RECMACTHLOGENTRY LogEntry
                    ON PayLog.FID = LogEntry.FID
            WHERE (LogEntry.FSOURCEFROMID = 'AR_REFUNDBILL')
        ) data
        GROUP BY data.FSOURCEFROMID,
                 data.FSRCBILLID,
                 data.FSRCROWID
    ) t3
        ON t1.FID = t3.FSRCBILLID
           AND t2.FENTRYID = t3.FSRCROWID
WHERE t1.FDOCUMENTSTATUS = 'C'
      AND t10.FCORRESPONDORGID = 0
GROUP BY t1.FSETTLEORGID,
         t1.FCONTACTUNIT,
         t1.FCURRENCYID,
         t1.FDATE
		 ,t1.FBILLNO
HAVING SUM(ISNULL(t2.FREFUNDAMOUNTFOR, 0) - ISNULL(t3.fcurwrittenoffamountfor, 0)) <> 0
UNION ALL
SELECT 'AR_OtherRecAble' FFORMID,t1.FBILLNO,
       t1.FSETTLEORGID,
       t1.FCONTACTUNIT,
       SUM(ISNULL(t1.FAMOUNTFOR, 0) - ISNULL(t3.fcurwrittenoffamountfor, 0)) FPAYAMOUNTFOR,
       SUM(ISNULL(t1.FAMOUNT, 0) - ISNULL(t3.fcurwrittenoffamount, 0)) FPAYAMOUNT,
       t1.FCURRENCYID,
       t1.FENDDATE
FROM T_AR_OTHERRECABLE t1
    INNER JOIN T_AR_OTHERRECABLE_O t2
        ON t1.FID = t2.FID
    LEFT OUTER JOIN V_FIN_CONTACTTYPE contacttype
        ON (
               t1.FCONTACTUNIT = contacttype.FITEMID
               AND contacttype.FFORMID = t1.FCONTACTUNITTYPE
           )
    LEFT OUTER JOIN
    (
        SELECT data1.FSOURCEFROMID,
               data1.FSRCBILLID,
               ISNULL(SUM(data1.FCURWRITTENOFFAMOUNTFOR), 0) fcurwrittenoffamountfor,
               ISNULL(SUM(data1.FCURWRITTENOFFAMOUNT), 0) fcurwrittenoffamount
        FROM
        (
            SELECT LogEntry.FSOURCEFROMID,
                   FSRCBILLID,
                   LogEntry.FCURWRITTENOFFAMOUNTFOR,
                   LogEntry.FCURWRITTENOFFAMOUNT
            FROM T_AR_RECMACTHLOG PayLog
                INNER JOIN T_AR_RECMACTHLOGENTRY LogEntry
                    ON PayLog.FID = LogEntry.FID
            WHERE (LogEntry.FSOURCEFROMID = 'AR_OtherRecAble')
        ) data1
        GROUP BY data1.FSOURCEFROMID,
                 data1.FSRCBILLID
    ) t3
        ON t1.FID = t3.FSRCBILLID
WHERE t1.FDOCUMENTSTATUS = 'C'
      AND contacttype.FCORRESPONDORGID = 0
      AND t1.FCONTACTUNITTYPE = 'BD_Customer'
GROUP BY t1.FSETTLEORGID,
         t1.FCONTACTUNIT,
         t1.FCURRENCYID,
         t1.FENDDATE
		 ,t1.FBILLNO
HAVING SUM(ISNULL(t1.FAMOUNTFOR, 0) - ISNULL(t3.fcurwrittenoffamountfor, 0)) <> 0;

以上只记录取数,不包括分析计算。

相关推荐
两点王爷8 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
两点王爷8 小时前
PostgreSQL 好用又独特的特性与空间函数
数据库
梦帮科技8 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
TDengine (老段)10 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Lucifer三思而后行12 小时前
Oracle SQL 优化实战:明明走了索引,SQL 还是慢?
sql·oracle
螺蛳粉 螺蛳粉12 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
泡泡鱼(敲代码中)14 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
这个DBA有点耶16 小时前
从OLTP到OLAP到HTAP:数据库负载分类的技术演进与选型指南
数据库·mysql·架构
润乾软件17 小时前
SQLazy: 在分组内搜索指定偏移量的相邻记录
sql·sqlazy
YangYang9YangYan18 小时前
商业数据分析校招项目怎么选,附项目设计与简历包装思路
大数据·数据库·数据分析