zoukankan      html  css  js  c++  java
  • SQL Case When Then Else End的使用收集

    需求:

    日志(info_log)里面包含多条录音记录(info_record)


    员工表
    info_user
    user_id user_name

    日志表
    info_log
    log_id user_id is_succ(成功1、失败0)

    录音表
    info_record
    record_id log_id record_len

    现需要统计每一个人员成功通话的长度、失败通话的长度、总的通话长度。下面是我使用的方法:

    1.创建相关表

    ------创建用户信息表-------------
    IF EXISTS (SELECT * FROM sysobjects  WHERE  [name]='sys_user')
    DROP TABLE sys_user
    BEGIN
        CREATE TABLE sys_user(
        [user_id] INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
        [user_name] NVARCHAR(20) NOT NULL
        )
    END
    GO
    -----------创建日志表---------------------
    IF EXISTS (SELECT * FROM sysobjects s WHERE [name]='info_log')    
    DROP TABLE info_log
    BEGIN
        CREATE TABLE info_log
        (
            log_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
            [user_id] INT NOT NULL,
            is_success BIT --1成功,0--失败
        )
    END
    GO
    
    -----------创建录音表-----------------------------
    IF EXISTS (SELECT * FROM sysobjects s WHERE [name] ='info_record')
    DROP  TABLE info_record
    BEGIN
        CREATE TABLE info_record(
            record_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
            log_id INT NOT NULL,
            record_len FLOAT NOT NULL
        )    
    END
    GO

    2.插入测试数据

    BEGIN
        INSERT into sys_user ([user_name]) VALUES('Jack')
        INSERT into sys_user ([user_name]) VALUES('Tom')
        INSERT into sys_user ([user_name]) VALUES('Harry')
        INSERT into sys_user ([user_name]) VALUES('Potter')
    END
    GO
    --------------日志表插入数据----------------------
    INSERT INTO info_log ([user_id],is_success) VALUES (1,1)
    INSERT INTO info_log ([user_id],is_success) VALUES (1,0)
    INSERT INTO info_log ([user_id],is_success) VALUES (2,1)
    INSERT INTO info_log ([user_id],is_success) VALUES (2,0)
    INSERT INTO info_log ([user_id],is_success) VALUES (3,1)
    INSERT INTO info_log ([user_id],is_success) VALUES (3,0)
    INSERT INTO info_log ([user_id],is_success) VALUES (4,1)
    INSERT INTO info_log ([user_id],is_success) VALUES (4,0)
    --------------插入录音数据-----------------------------
    INSERT info_record (log_id,record_len)VALUES(1,10.08)
    INSERT info_record (log_id,record_len)VALUES(2,11.18)
    INSERT info_record (log_id,record_len)VALUES(3,9.08)
    INSERT info_record (log_id,record_len)VALUES(4,8.2)
    INSERT info_record (log_id,record_len)VALUES(5,7.08)
    INSERT info_record (log_id,record_len)VALUES(6,2.08)
    INSERT info_record (log_id,record_len)VALUES(7,3.08)
    INSERT info_record (log_id,record_len)VALUES(8,5.08)
    INSERT info_record (log_id,record_len)VALUES(9,4.08)
    INSERT info_record (log_id,record_len)VALUES(10,5.08)

    3.实现统计每一个人员成功通话的长度、失败通话的长度、总的通话长度

    SELECT su.[user_name],SUM(CASE WHEN il.is_success=1 THEN  ir.record_len ELSE 0 END ) AS '成功通话长度',
    sum(case when il.is_success=0 then ir.record_len else 0 end) as'失败通话长度',
    SUM(ir.record_len) AS '总通话长度'
    FROM sys_user su
    LEFT JOIN info_log il ON il.[user_id] = su.[user_id]
    LEFT JOIN info_record ir ON ir.log_id = il.log_id
    GROUP BY su.[user_name] 

    希望博友如有更好的方法,写下来探讨一下。

    风雨苦痛皆营养,欲成大木柱天长。
  • 相关阅读:
    T-SQL---多值模糊查询的处理
    SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率
    SQL Server创建复合索引时,复合索引列顺序对查询的性能影响
    Sql Server 聚集索引扫描 Scan Direction的两种方式------FORWARD 和 BACKWARD
    Sql Server 内存相关计数器以及内存压力诊断
    通过手动创建统计信息优化sql查询性能案例
    对聚集表查询的时候,未显式指定排序列的时候,默认查询结果的顺序一定是按照聚集索引顺序排序的吗
    Buffer cache hit ratio性能计数器真的可以作为SQL Server 内存瓶颈的判断指标吗?
    sqlserver 存储过程中使用临时表到底会不会导致重编译
    权限 位运算
  • 原文地址:https://www.cnblogs.com/acoll/p/2719862.html
Copyright © 2011-2022 走看看