用友U8取年度销售平均价,最低/最高售价,最低/最高售价的销售数量

此SQL创建了一个视图,用于分析每年的销售数据,包括平均单价、销量排名、最高售价及其数量以及最低售价及其数量。通过JOIN操作从SO_SOMain和SO_SODetails表中筛选出特定状态的销售记录,然后进行聚合计算和排序,以提供全面的销售洞察。
摘要由CSDN通过智能技术生成

--年度销售平均单价,销量排名,最高售价及数量,最低售价及数量
ALTER VIEW V_Quick_So
AS
SELECT ROW_NUMBER() OVER (PARTITION BY So.iYear ORDER BY So.iQuantity DESC) AS id,
       So.iYear,
       So.cInvCode,
       So.iQuantity,
       So.iSum,
       So.avgPrice,
       SoH.iQuantity AS HiQuantity,
       SoH.iTaxUnitPrice AS HiTaxUnitPrice,
       SoL.iQuantity AS LiQuantity,
       SoL.iTaxUnitPrice AS LiTaxUnitPrice
FROM
(
    SELECT So.cInvCode,
           So.iYear,
           SUM(So.iQuantity) AS iQuantity,
           SUM(So.iSum) AS iSum,
           SUM(So.iSum) / SUM(So.iQuantity) AS avgPrice
    FROM
    (
        SELECT YEAR(dDate) AS iYear,   --年度
               cInvCode,               --存货编码
               iQuantity,              --数量
               iTaxUnitPrice,          --原币含税单价
               ISNULL(iSum, 0) AS iSum --原币价税合计
        FROM dbo.SO_SOMain
            JOIN dbo.SO_SODetails
                ON SO_SODetails.ID = SO_SOMain.ID
        WHERE SO_SOMain.cSTCode IN ( 'SC', 'SM', 'SW' )
    ) So
    GROUP BY So.cInvCode,
             So.iYear
) So
    JOIN
    (
        SELECT So.iYear,
               So.cInvCode,
               So.iQuantity,
               So.iTaxUnitPrice
        FROM
        (
            SELECT ROW_NUMBER() OVER (PARTITION BY cInvCode, YEAR(dDate) ORDER BY iTaxUnitPrice DESC) AS id,
                   YEAR(dDate) AS iYear, --年度
                   cInvCode,             --存货编码
                   iQuantity,            --数量
                   iTaxUnitPrice         --原币含税单价 

            FROM dbo.SO_SOMain
                JOIN dbo.SO_SODetails
                    ON SO_SODetails.ID = SO_SOMain.ID
                       AND SO_SOMain.cSTCode IN ( 'SC', 'SM', 'SW' )
        ) So
        WHERE So.id = 1
    ) SoH
        ON SoH.cInvCode = So.cInvCode
           AND SoH.iYear = So.iYear
    JOIN
    (
        SELECT So.iYear,
               So.cInvCode,
               So.iQuantity,
               So.iTaxUnitPrice
        FROM
        (
            SELECT ROW_NUMBER() OVER (PARTITION BY cInvCode, YEAR(dDate) ORDER BY iTaxUnitPrice ASC) AS id,
                   YEAR(dDate) AS iYear, --年度
                   cInvCode,             --存货编码
                   iQuantity,            --数量
                   iTaxUnitPrice         --原币含税单价 

            FROM dbo.SO_SOMain
                JOIN dbo.SO_SODetails
                    ON SO_SODetails.ID = SO_SOMain.ID
                       AND SO_SOMain.cSTCode IN ( 'SC', 'SM', 'SW' )
        ) So
        WHERE So.id = 1
    ) SoL
        ON SoL.cInvCode = So.cInvCode
           AND SoL.iYear = So.iYear


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值