• SQL 销售统计对比


    这2天一直在做一个销售统计对比模块;

    先描述下:A表里记录了各个店铺的信息、B表里是销售记录的信息(与A表code对应);

    本来就一个简单的查询语句,问题就出在查询的时候要根据不同时间段来查询 - -

    也就是说传入三个时间段分别为:本月、上一个月、去年同期;要根据这三个时间段来查询他当时的销售数量、实售金额、单价,按说也不难可是对于同一张表里分时间段来查询的话我相信不细心的朋友都会迷茫。。。

    我也 是迷茫了几天才弄出来,现在贴上来做个记号 以后再用到也方便了;废话不说了上代码:

    这个查询语句有点复杂又点长耐心点。。。

    代码
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    --
    Author: <宋朋飞 >
    --
    Create date: <Create Date,2010-12-13 10:49:08,>
    --
    Description: <Description,各店铺销售明细对比,>
    --
    =============================================
    ALTER PROCEDURE [dbo].[select_SellContrast]
    @BLY DATETIME , --lastyear 去年开始时间
    @ELY DATETIME , --去年结束日期
    @BLM DATETIME , --上月开始时间
    @ELM DATETIME , --上月结束时间
    @beginNow DATETIME , --当前开始时间
    @endNow DATETIME , --当前结束时间
    @Class VARCHAR(50) --标识当前?种类的销售明细对比

    AS
    BEGIN
    SELECT (SELECT c_short FROM xt_company WHERE c_comcode=c.c_com) AS '店别'
    ,a.c_number
    AS '同期数量'
    ,b.c_number
    AS '上次'
    ,c.c_number
    AS '本次'
    ,c.c_number
    -a.c_number AS '同比'
    ,c.c_number
    -b.c_number AS '环比'
    ,
    convert(decimal(20,2),a.c_price) as '同期实售'
    ,
    convert(decimal(20,2),b.c_price) as '上次'
    ,
    convert(decimal(20,2),c.c_price) as '本次'
    ,
    convert(decimal(20,2),c.c_price-a.c_price) AS '同比'
    ,
    convert(decimal(20,2),c.c_price-b.c_price) AS '环比'
    ,
    convert(decimal(20,2),a.c_price/a.c_number) as '同期单价'
    ,
    convert(decimal(20,2),b.c_price/b.c_number) as '上次'
    ,
    convert(decimal(20,2),c.c_price/c.c_number) as '本次'
    ,
    convert(decimal(20,2),c.c_price-a.c_price) AS '同比'
    ,
    convert(decimal(20,2),c.c_price-b.c_price) AS '环比'
    ,
    convert(decimal(10,1),(c.c_price/c.c_zprice)*10) as '折扣'
    FROM --去年同期
    (SELECT c_com, SUM(c_number)AS'c_number',sum(c_price*c_number) AS 'c_price' FROM ls_retail
    WHERE c_arttypecode=@Class and c_date BETWEEN @BLY AND @ELY
    group by c_com) a
    INNER JOIN --上月
    (SELECT c_com,SUM(c_number)AS'c_number',sum(c_price*c_number) AS 'c_price' FROM ls_retail
    WHERE c_arttypecode=@Class and c_date BETWEEN @BLM AND @ELM
    group by c_com) b ON b.c_com=a.c_com
    INNER JOIN --当前
    (SELECT c_com,SUM(c_number)AS'c_number',sum(c_price*c_number) AS 'c_price',sum(c_zprice)as 'c_zprice' FROM ls_retail
    WHERE c_arttypecode=@Class and c_arttypecode!=07&08&09 and c_date BETWEEN @beginNow AND @endNow
    GROUP BY c_com) c ON c.c_com=a.c_com
    GROUP BY c.c_com,a.c_number,b.c_number,c.c_number,a.c_price,b.c_price,c.c_price,c.c_zprice
    --GROUP BY 必须加上去否则会提示你错误
    ORDER BY c.c_com
    END

    看着挺复杂,其实静下心来看看也就那么回事,这东西得有耐心。。。。

  • 相关阅读:
    Swap Nodes in Pairs
    Permutations(copy)
    Sort Colors
    Merge Two Sorted Lists
    Implement Queue using Stacks
    Best Time to Buy and Sell Stock
    Happy Number
    Gray Code
    springMVC初次搭建,产生错误
    JSP常用指令
  • 原文地址:https://www.cnblogs.com/song_/p/1906948.html
Copyright © 2020-2023  润新知