日期:2014-05-18  浏览次数:20506 次

问个查询语句!!!


如图所示,用SQL语句查询record表,得出record表下方的临时表(对a、b非NULL值进行计数,条件是8<=timea<=11的时候a才能计数,8<=timeb<=11的时候b才能计数,也就是说record表上红色部分是可计数的)
请问查询语句要怎么写呢?求指教感激不尽!



------解决方案--------------------
Select Sum(T.a), Sum(T.b)
From (Select Count(a) As a, 0 b From Rercord Where 8<=timea<=11 And a is Not Null
Union 
Select 0 a, Count(b) As b From Rercord Where 8<=timeb<=11 And b is Not Null) T

------解决方案--------------------
SQL code

with Record as
(
    --虚拟出一张表
    select 1 as ID,null as a, 22 as b,10 as timea,7 as timeb union all
    select 2,33,null,11,8 union all
    select 3,44,33,9,9 union all
    select 4,11,null,3,9 union all
    select 5,22,31,7,11 union all
    select 6,null,5,13,10
)
select 
    sum(
        --增加一列,判断 timea如果在8 和 11 之间 并且 a 不为空 设置为1 ,最后sum统计
        case when timea between 8 and 11 and a IS not null 
             then 1
        else 0 
        end
    ) as a,
    SUM
    (
        --增加一列,判断 timea如果在8 和 11 之间 并且 b 不为空 设置为1 ,最后sum统计
        case when timeb between 8 and 11 and b IS not null 
             then 1
        else 0
        end 
    )as b 
from Record
/*
a           b
----------- -----------
2           3

(1 row(s) affected)
*/