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)
  • 相关阅读:
    c++笔记--数组对象、vector对象和构造函数
    马加爵之歌
    周末有同学要来
    IQ
    [转]JavaScript中typeof 讲解
    【转】JS兼容Firefox
    firefox与ie 的javascript区别
    关于委托(转)
    经典常用的javascript代码收藏
    关于DataList使用DropDownList的分页实现 技巧实例源码
  • 原文地址:https://www.cnblogs.com/wequst/p/1292619.html
Copyright © 2011-2022 走看看