zoukankan      html  css  js  c++  java
  • 给定一张表(列有月份,销售额),要求查询出月份、本月销售额、上月销售额这三个结果,如果当月上个月的销售额不存在就显示为“*”。

    刚逛论坛,发现一个这样的问题,如果不建立一个新的月份的表,可以用CET来解决。

    给定一张表(列有月份,销售额),要求查询出月份、本月销售额、上月销售额这三个结果,如果当月上个月的销售额不存在就显示为“*”。

    if exists (select * from sysobjects where id = object_id(N'[tb2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)  drop table [tb2]  
    
    
    CREATE TABLE tb2(
    ID INT IDENTITY,
    SALEDATE DATETIME,
    AMOUNT FLOAT
    )
    
    INSERT INTO tb2
    SELECT '2015-05-02',20.1
    INSERT INTO tb2
    SELECT '2015-02-02',24.1
    INSERT INTO tb2
    SELECT '2015-03-02',10.4
    INSERT INTO tb2
    SELECT '2015-05-12',27.8
    INSERT INTO tb2
    SELECT '2015-06-02',70.13
    INSERT INTO tb2
    SELECT '2015-06-12',90.31
    INSERT INTO tb2
    SELECT '2016-01-06',30.22
    INSERT INTO tb2
    SELECT '2016-02-08',5.7

    插入后显示表的数据

    SELECT * FROM tb2

    用以下sql跑出所需要的结果

    WITH MON as(
    select CONVERT(VARCHAR(7),GETDATE(),120) AS MO
    UNION 
    SELECT CONVERT(VARCHAR(7),DATEADD(M,-1,GETDATE()),120) AS MO
    )
    
    SELECT MO AS MONTH,CASE WHEN  SUM(ISNULL(AMOUNT,0))=0 THEN '*'
    ELSE CAST(SUM(ISNULL(AMOUNT,0)) AS VARCHAR(10)) END AS SUM_AMOUNT 
    FROM Mon 
    LEFT JOIN tb2 ON MO=CONVERT(VARCHAR(7),SALEDATE,120)
    GROUP BY MO

    如果还有其他好的方法,希望互相交流下,谢谢!

  • 相关阅读:
    spark基础(1)
    Homebrew的使用教程,镜像源的推荐,安装软件的方法
    Scala Trait(特征)
    P5308 [COCI2019] Quiz
    Vjudge contest 425291
    Vjudge contest 424925
    AT3558 Modern Painting
    Vjudge contest 425061
    Vjudge contest 423849
    Codeforces Round 704
  • 原文地址:https://www.cnblogs.com/bobozhu/p/5130594.html
Copyright © 2011-2022 走看看