gruop by 分组查询,case when 用法等。

现有表雇员表(Emploee)结构如下:
ID 雇员部门 雇员类型
Eid Edepart EmploeeType
1 销售部 实习
2 销售部 试用
3 销售部 试用
4 销售部 正式工
6 人力部 正式工
7 人力部 实习
8 开发部 外派
能否用一句语句写出这种效果

部门 实习人数 试用人数 正式工人数 外派人数
销售部 1 2 1 0
人力部 1 0 1 0
开发部 0 0 0 1

-----------------------------

---->建表
create table tb([Eid] int,[Edepart] varchar(6),[EmploeeType] varchar(6))
insert tb
select 1,'销售部','实习' union all
select 2,'销售部','试用' union all
select 3,'销售部','试用' union all
select 4,'销售部','正式工' union all
select 6,'人力部','正式工' union all
select 7,'人力部','实习' union all
select 8,'开发部','外派'
GO

select Edepart,实习人数=sum(case when EmploeeType = '实习人数' then 1 else 0 end),
               试用人数
=sum(case when EmploeeType= '试用人数' then 1 else 0 end),

               正式工人数=sum(case when EmploeeType = '正式工人数' then 1 else 0 end),
                 外派人数
=sum(case when EmploeeType = '外派人数' then 1 else 0 end)
from Emploee group by Edepart

 

_____________________________________________________________________________

 

常见的几种CASE语句的用法如下所示:
   1.CASE 函数用于计算多个条件并为每个条件返回单个值。CASE 函数通常的用途是使用可读性更强的值替换代码或缩写。
下面的查询使用 CASE 函数重命名书籍的分类,以使之更易理解。
USE pubs
SELECT
   CASE type
      WHEN 'popular_comp' THEN 'Popular Computing'
      WHEN 'mod_cook' THEN 'Modern Cooking'
      WHEN 'business' THEN 'Business'
      WHEN 'psychology' THEN 'Psychology'
      WHEN 'trad_cook' THEN 'Traditional Cooking'
      ELSE 'Not yet categorized'
   END AS Category,
CONVERT(varchar(30), title) AS "Shortened Title",
price AS Price
from titles
WHERE price IS NOT NULL
ORDER BY 1

2.使用带有简单 CASE 函数和 CASE 搜索函数的 SELECT 语句
    CASE 函数的另一个用途给数据分类。下面的查询使用 CASE 函数对价格分类。
SELECT
   CASE
      WHEN price IS NULL THEN 'Not yet priced'
      WHEN price < 10 THEN 'Very Reasonable Title'
      WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
      ELSE 'Expensive book!'
   END AS "Price Category",
CONVERT(varchar(20), title) AS "Shortened Title"
from pubs.dbo.titles
ORDER BY price
 3.使用带有 SUBSTRING 和 SELECT 的 CASE 函数
下面的示例使用 CASE 和 THEN 生成一个有关作者、图书标识号和每个作者所著图书类型的列表。
USE pubs
SELECT SUBSTRING((RTRIM(a.au_fname) + ' '+
   RTRIM(a.au_lname) + ' '), 1, 25) AS Name, a.au_id, ta.title_id,
   Type =
  CASE
    WHEN SUBSTRING(ta.title_id, 1, 2) = 'BU' THEN 'Business'
    WHEN SUBSTRING(ta.title_id, 1, 2) = 'MC' THEN 'Modern Cooking'
    WHEN SUBSTRING(ta.title_id, 1, 2) = 'PC' THEN 'Popular Computing'
    WHEN SUBSTRING(ta.title_id, 1, 2) = 'PS' THEN 'Psychology'
    WHEN SUBSTRING(ta.title_id, 1, 2) = 'TC' THEN 'Traditional Cooking'
  END
from titleauthor ta JOIN authors a ON ta.au_id = a.au_id

转载于:https://www.cnblogs.com/jorlan_chen/archive/2011/01/24/1943294.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值