• [传智播客学习日记]SQL语句一例通之二——查询、存储过程


    一、一个例子看明白select语句的用法——查询本月通话总时长最多的前三个呼叫员的编号
    先分析一下题目,这道题有几个限制条件,
    首先是本月,这里要用时间函数,然后是总时长,要用聚合函数,之后是最多,需要用排序,最后是三个,用top。
    搭出select...where...group by...order by...的框架。
    首先,查询的目标是前三人的编号,还要显示总时长,就是:
    select top 3 [CallerNumber],...... from CallRecords
    总时长的话,可以这样取:
    sum(datediff(ss,[StartDateTime],[EndDateTime]))
    发现这里用到了聚合函数sum,那肯定要:
    group by [CallerNumber]
    既然查找的是本月,那就:
    where datediff(month,[StartDateTime],'2010-07-1') = 0
    最高的前三名一定是要排序的,所以
    order by sum(datediff(ss,[StartDateTime],[EndDateTime])) desc

    于是答案就是:
    select top 3 [CallerNumber], sum(datediff(ss,[StartDateTime],[EndDateTime])) from CallRecords
    group by [CallerNumber]
    where datediff(month,[StartDateTime],'2010-07-1') = 0
    order by sum(datediff(ss,[StartDateTime],[EndDateTime])) desc

    二、一个例子看明白带返回参数的存储过程——登陆成功判断
    声明:这种方法判断用户名密码正确与否很不科学,只是演示存储过程而已!
    首先定义存储过程,传进来用户Id和密码,返回成功与否的bit值,然后定义一个usrCount计数变量,在数据库里找用户信息,如果找到了,则计数位1,否则为0。
    create proc [dbo].[usp_CheckLogin]
        @loginId varchar(100),
        @loginPwd varchar(100),
        @isSuccess bit output
    as
    begin
        declare @usrCount int
        set @usrCount = (select count(*) from TblUser where loginId=@loginId and loginPwd=@loginPwd)
        if (@usrCount > 0)
            set isSuccess = 1;
        else
            set isSuccess = 0;
    end
    调用这个存储过程:
    declare @isOK bit
    exec usp_CheckLogin @loginId='用户名',@loginPwd='密码',@IsSuccess=@isOK output
    可以通过这条语句查看结果:
    print @isOK

  • 相关阅读:
    [置顶] Extjs4 异步刷新书的情况下 保持树的展开状态
    控制系统中常用的名词术语
    开环控制系统与闭环控制系统
    反馈控制
    Tensorflow把label转化成one_hot格式
    Tensorflow——tf.nn.max_pool池化操作
    Tensorflow——tf.nn.conv2d卷积操作
    Tensoflow简单神经网络实现非线性拟合
    Tensorflow 中的 placeholder
    Tensorflow 中的constant、Session、placeholde和 Variable简介
  • 原文地址:https://www.cnblogs.com/Elijah/p/2259501.html
Copyright © 2020-2023  润新知