zoukankan      html  css  js  c++  java
  • 利用子查询实现逐条比较


    (
    1)
    declare @test table(pid int,sitid int,qty money)
    insert @test
    select 1,2,10
    union all select 2,3,20
    union all select 4,5,15
    union all select 1,4,16
    union all select 1,8,18


    select * from @test

    select 
    a.pid,
    a.sitid,
    (
    select 
                        
    sum(qty) 
                    
    from @test 
                    
    where pid=a.pid and sitid<a.sitid)
    from @test a

    结果:
    (
    5 row(s) affected)

    pid         sitid       qty                   
    ----------- ----------- --------------------- 
    1           2           10.0000
    2           3           20.0000
    4           5           15.0000
    1           4           16.0000
    1           8           18.0000

    (
    5 row(s) affected)

    pid         sitid                             
    ----------- ----------- --------------------- 
    1           2           NULL
    2           3           NULL
    4           5           NULL
    1           4           10.0000
    1           8           26.0000

    (
    5 row(s) affected)

    (
    2):
    加上等号后变成了不同的情况

    declare @test table(pid int,sitid int,qty money)
    insert @test
    select 1,2,10
    union all select 2,3,20
    union all select 4,5,15
    union all select 1,4,16
    union all select 1,8,18


    select * from @test

    select 
    a.pid,
    a.sitid,
    (
    select 
                        
    sum(qty) 
                    
    from @test 
                    
    where pid=a.pid and sitid<=a.sitid)
    from @test a


    结果:
    (
    5 row(s) affected)

    pid         sitid       qty                   
    ----------- ----------- --------------------- 
    1           2           10.0000
    2           3           20.0000
    4           5           15.0000
    1           4           16.0000
    1           8           18.0000

    (
    5 row(s) affected)

    pid         sitid                             
    ----------- ----------- --------------------- 
    1           2           10.0000
    2           3           20.0000
    4           5           15.0000
    1           4           26.0000
    1           8           44.0000

    (
    5 row(s) affected)


    以上看出pid
    =a.pid and sitid<=a.sitid条件的真正的含义

    (
    3):
    以下是一个具体的应用:
    declare @test table(pid int,sitid int,qty money)
    insert @test
    select 1,2,10
    union all select 2,3,20
    union all select 4,5,15
    union all select 1,4,16
    union all select 1,8,18


    select * from @test

    declare @c  money
    set @c=15

    select 
    a.pid,
    a.sitid,
    case when
            (
    @c- 
                
    isnull((select 
                        
    sum(qty) 
                    
    from @test 
                    
    where pid=a.pid and sitid<=a.sitid),0))>=0
        
    then a.qty
        
    else
        
    case when (a.qty +@c - 
                
    isnull((select 
                        
    sum(qty) 
                    
    from @test 
                    
    where pid=a.pid and sitid<=a.sitid),0))>=0
        
    then  a.qty +@c -
                
    isnull((select 
                        
    sum(qty) 
                    
    from @test 
                    
    where pid=a.pid and sitid<=a.sitid),0)
        
    else 0 
        
    end
        
    end qty
    from @test a

    结果:

    (
    5 row(s) affected)

    pid         sitid       qty                   
    ----------- ----------- --------------------- 
    1           2           10.0000
    2           3           20.0000
    4           5           15.0000
    1           4           16.0000
    1           8           18.0000

    (
    5 row(s) affected)

    pid         sitid       qty                   
    ----------- ----------- --------------------- 
    1           2           10.0000
    2           3           15.0000
    4           5           15.0000
    1           4           5.0000
    1           8           .0000

    (
    5 row(s) affected)
  • 相关阅读:
    禁止ios默认拉动弹性行为
    javascript 网页图标音乐切换
    js常用 禁止F5 和右键
    弹窗插件
    手机时间选择插件 Jquery
    Jquery获取背景图片src路径
    Arduino 数字函数总结
    Arduino 开关控制小灯持续亮之具体思路
    C语言流控制命令的总结
    C++Primer 第四章 表达式
  • 原文地址:https://www.cnblogs.com/wequst/p/1292619.html
Copyright © 2011-2022 走看看