当前位置: 代码迷 >> Sql Server >> 在特定条件上SUM\MIN\MAX取数请问
  详细解决方案

在特定条件上SUM\MIN\MAX取数请问

热度:30   发布时间:2016-04-27 11:57:56.0
在特定条件下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.daimami.com/other/1391128.html
  相关解决方案