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

在特定条件下SUM\MIN\MAX取数请教。
数据库几个表关联后有表A:
字段有:
工资类型、是否固定工、是否超过十年工、应发工资
数据有:
计时、是、是、3000
计件、是、否、4000
年薪、否、否、4000
计件、否、否、3000

我用:
SQL code

SELECT SUM(CASE WHEN 工资类型='年薪' THEN 1 ELSE 0 END) nxzQTY,SUM(CASE WHEN 工资类型='计时' THEN 1 ELSE 0 END) jsQTY,
SUM(CASE WHEN 工资类型='计件' THEN 1 ELSE 0 END) jjQTY,SUM(CASE WHEN ISNULL(是否固定工,0)=1 THEN 1 ELSE 0 END) gdgQTY,
SUM(CASE WHEN ISNULL(是否超过十年工,0)=1 THEN 1 ELSE 0 END) up10QTY



以上能够取出人数,但我想取每个工资类型的最大、最小,是否固定工的最大、最小,超过十年工的最大最小,加在后面用MIN\MAX取不出,特此请教高手一下。

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

with tb1 as
(
    select '计时' as 工资类型,'是' as 是否固定工,'是' as 是否超过十年工,3000 as 应发工资 union all
    select '计件','是','否',4000 union all
    select '年薪','否','否',4000 union all
    select '计件','否','否',3000
)
    select    
        distinct
        *,
        sum(CASE WHEN 工资类型='年薪' THEN 1 ELSE 0 END) over() as 年薪人数,
        sum(CASE WHEN 工资类型='计时' THEN 1 ELSE 0 END) over() as 计时人数,
        sum(CASE WHEN 工资类型='计件' THEN 1 ELSE 0 END) over() as 计件人数,
        sum(CASE WHEN ISNULL(是否固定工,'否')='是' THEN 1 ELSE 0 END) over() 是否固定工人数,
        sum(CASE WHEN ISNULL(是否超过十年工,'否')='是' THEN 1 ELSE 0 END) over() as 是否超过十年工人数,
        MAX(应发工资) over(partition by 工资类型) as max_工资类型,
        MIN(应发工资) over(partition by 工资类型) as min_工资类型,
        MAX(应发工资) over(partition by 是否固定工) as max_工资类型,
        MIN(应发工资) over(partition by 是否固定工) as min_工资类型,
        MAX(应发工资) over(partition by 是否超过十年工) as max_工资类型,
        MIN(应发工资) over(partition by 是否超过十年工) as min_工资类型
    from tb1
/*
工资类型 是否固定工 是否超过十年工 应发工资        年薪人数        计时人数        计件人数        是否固定工人数     是否超过十年工人数   max_工资类型    min_工资类型    max_工资类型    min_工资类型    max_工资类型    min_工资类型
---- ----- ------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
计件   否     否       3000        1           1           2           2           1           4000        3000        4000        3000        4000        3000
计件   是     否       4000        1           1           2           2           1           4000        3000        4000        3000        4000        3000
计时   是     是       3000        1           1           2           2           1           3000        3000        4000        3000        3000        3000
年薪   否     否       4000        1           1           2           2           1           4000        4000        4000        3000        4000        3000

(4 row(s) affected)
*/
我的异常网推荐解决方案:软件开发者薪资,http://www.aiyiweb.com/other/1391128.html