开发者社区> 小5聊基础> 正文

【Sql Server】基础之统计库龄语句,仅作为语句使用

简介: 知识点的综合使用 分组、数据转换、Case when then、max、min、count、sum、left join多表关联等知识点
+关注继续查看


作者:小5聊基础

简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑

编程原则:Write Less Do More

    • 知识点
    编号知识点说明
    1group by对某个表字段进行分组
    2convert

    数据类型转换  

    3case when then else end逻辑判断
    4max最大值
    5min最小值
    6count记录数
    7sum统计值,综合
    8left join左链接

    1、知识点

    1)group by

    此处以商品编号进行分组

    select shopid from stock group by shopid

    image.gif

    imageimage.gif编辑2)

     2)convert

    数据类型转换,varchar(10)和120,datetime时间数据类型转为字符串,并只显示10位长度值,刚好就是yyyy-MM-dd

    select convert(varchar(10),timevalue,120) as timevalue from stock

    image.gif

    imageimage.gif编辑

    2、创建表

    USE [test]
    GO
    /****** Object:  Table [dbo].[stock]    Script Date: 04/17/2022 10:52:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[stock](
        [typeValue] [varchar](50) NULL,
        [shopid] [int] NULL,
        [timevalue] [datetime] NULL,
        [stockValue] [int] NULL
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO

    image.gif

    3、表添加记录

    模拟一定量的记录进行测试

    --truncate table stock
    /*
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',123,'2020-01-01',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',234,'2020-01-02',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',123,'2020-01-03',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',234,'2020-01-04',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',123,'2020-01-05',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',234,'2020-01-06',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',123,'2020-01-07',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',234,'2020-01-08',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',123,'2020-01-09',30)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',234,'2020-01-10',30)
    */

    image.gif

    4、查询代码

    /*
    编号123,还存在库存,则使用上次进货时间2020-01-11和2020-02-20相差,就是40天
    编号234,还存在库存,则使用上次进货时间2020-01-11和2020-02-20相差,就是41天'
    */
    declare @searchTime varchar(50)
    set @searchTime='2020-02-20'
    select a.shopid as 商品编号,
    convert(varchar(10),a.inMaxTime,120) as 上次进货时间,
    @searchTime as 搜索时间,
    (case when (a.totalInValue-b.totalOutValue)>0 
    then datediff(day, a.inMaxTime, @searchTime) --还有库存,则用上次进货时间计算
    else datediff(day, b.outMaxTime, @searchTime) end) as 库龄, --没有库存了,使用最后一次出库时间计算
    (a.totalInValue-b.totalOutValue) as '库存',
    (case when (a.totalInValue-b.totalOutValue)>0 then '还有库存' else '已出完' end) as 是否出库完
    from(
        --先按商品编号分组,并筛选入库值和统计入库总值
        --出库最小得时间
        select shopid,
        min(timevalue) as inMinTime, --入库最小时间
        max(timevalue) as inMaxTime, --入库最大时间(上次进货时间)
        sum(stockValue) as totalInValue,
        count(1) as inCount
        from stock 
        where typeValue='入库' and timevalue<=@searchTime
        group by shopid
    ) as a
    left join(
        select shopid,
        min(timevalue) as outMinTime, --出库最小时间
        max(timevalue) as outMaxTime, --出库最大时间
        sum(stockValue) as totalOutValue  --出库总数
        from stock where typeValue='出库' and timevalue<=@searchTime
        group by shopid
    ) as b
    on a.shopid=b.shopid

    image.gif


    版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

    相关文章
    SQL Server 查询优化的 7 个技巧
    SQL Server 查询优化的 7 个技巧
    61 0
    如何使用码匠连接 Microsoft SQL Server
    目前码匠已经实现了与 Microsoft SQL Server 数据源的连接,能让您快速、高效地搭建应用和内部系统。
    27 0
    SQL Server提示:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位置。。。。
    今天在安装SQL Server的过程中,出现问题:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位,然后单击“下一步”,可从以下位置下载安装文件。
    46 0
    SQL Server manager studio(SSMS)的安装教程
    1、SQL Server manager studio(SSMS)安装包下载 方法一:选择从官网下载: https://learn.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms?view=sql-server-ver16 点击free download即可下载 方法二:百度网盘下载: 如果觉得上面方法下载慢的话也可以通过我的网盘进行下载 网盘链接: https://pan.baidu.com/s/1vi9sEH
    73 0
    QGS
    (Centos7-x86)通过ODBC连接SQL server数据库
    记(Centos7-x86)通过ODBC连接SQL server数据库
    52 0
    QGS
    (Centos7-x86)zabix5.0-0 —agent2监控 SQL server数据库(Windows)
    记(Centos7-x86)zabix5.0-0 —agent2监控 SQL server数据库(Windows)
    30 0
    SQL SERVER 数据库导出表设计
    SQL SERVER 数据库导出表设计
    32 0
    C#中将DataGrid上的修改同步到SQL Server数据库中
    C#中将DataGrid上的修改同步到SQL Server数据库中
    20 0
    C#中将DataGrid绑定到SQL Server数据库,显示数据库中的数据
    C#中将DataGrid绑定到SQL Server数据库,显示数据库中的数据
    37 0
    SQL server 2008 最小化安装(学习专用)
    之后下载这两个安装包,根据电脑实际情况下载,这里我选择x64版本的两个轻量级安装包,其他版本比较大,学习的话这两个版本就够了
    68 0
    +关注
    小5聊基础
    帮助别人,成长自己!
    文章
    问答
    文章排行榜
    最热
    最新
    相关电子书
    更多
    用SQL做数据分析
    立即下载
    阿里云流计算 Flink SQL 核心功能解密
    立即下载
    Comparison of Spark SQL with Hive
    立即下载