sqlserver中if语句替代when...case..语句

annan211 2011-10-30 10:21:26
create table Employees (
EmployeeID char(6) primary key not null,
Name varchar(6) not null,
Education varchar(4) not null,
Birthday datetime not null,
Sex bit not null default 1,
WorkYear tinyint null,
Address varchar(40),
PhoneNumber char(12) null,
Pepartment char(3) not null
)
insert into Employees values('000001','王林','大专','1966-01-23',1,8,'中山路32-1-508','83355668',2);
insert into Employees values('010008','伍容华','本科','1976-03-28',1,3,'北京东路100-2','83321321',1);
insert into Employees values('020010','王向容','硕士','1982-12-09',1,2,'四牌楼10-0-108','83792361',1);
insert into Employees values('020018','李丽','大专','1960-07-30',0,6,'中山东路102-2','83413301',1);
insert into Employees values('102201','刘明','本科','1972-10-18',1,3,'虎距路100-2','83606608',5);
insert into Employees values('102208','朱骏','硕士','1965-09-28',1,2,'牌楼巷5-3-106','84708817',5);
insert into Employees values('108991','钟敏','硕士','1979-08-10',0,4,'中山路10-3-105','83346722',3);
insert into Employees values('111006','张石兵','本科','1974-10-01',1,1,'解放路34-1-203','84563418',5);
insert into Employees values('210678','林涛','大专','1977-04-02',1,2,'中山北路24-35','83467336',3);
insert into Employees values('302566','李玉珉','本科','1968-09-20',1,3,'热和路209-3','58765991',4);
insert into Employees values('308759','叶凡','本科','1978-11-18',1,2,'北京西路3-7-52','83308901',4);
insert into Employees values('504209','陈林琳','大专','1969-09-03',0,5,'汉中路120-4-12','84468158',4);
select EmployeeID,Name,Address,Pepartment=
case Pepartment
when 1 then '财务部'
when 2 then '人力资源部'
when 3 then '经理办公室'
when 4 then '研发部'
when 5 then '市场部'
end
from Employees
--(3) 使用if 语句实现以上功能
...全文
4605 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
与孤单同行 2014-01-04
  • 打赏
  • 举报
回复
我想用SQL做一个表格,就是一个员工工资的表格,但员工销售的毛利率大于某一数值的时候,就可以自动进行下一种运算,哪位高手可以指教一下,跪求!!!!!
xiaomiao0815 2012-07-02
  • 打赏
  • 举报
回复
顶牛人……
annan211 2011-10-31
  • 打赏
  • 举报
回复
如此牛人 感激涕零 真不知道该说什么好 祝您幸福
annan211 2011-10-31
  • 打赏
  • 举报
回复
恩 也算是 谢谢各位热心人
gw6328 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 annan211 的回复:]

select EmployeeID,Name,Address,Pepartment
if Pepartment=1
begin
set Pepartment= '财务部'
end
else if Pepartment=2
begin
set Pepartment= '人力资源部'
end
else if Pepartment= 3
begin
s……
[/Quote]

if xxx
select xxx from xxx
else if xxx
select xxx from xxx

..
;
不知道这样算不算一句,还是用case when好点。
-晴天 2011-10-30
  • 打赏
  • 举报
回复
create table Employees (
EmployeeID char(6) primary key not null,
Name varchar(6) not null,
Education varchar(4) not null,
Birthday datetime not null,
Sex bit not null default 1,
WorkYear tinyint null,
Address varchar(40),
PhoneNumber char(12) null,
Pepartment char(3) not null
)
insert into Employees values('000001','王林','大专','1966-01-23',1,8,'中山路32-1-508','83355668',2);
insert into Employees values('010008','伍容华','本科','1976-03-28',1,3,'北京东路100-2','83321321',1);
insert into Employees values('020010','王向容','硕士','1982-12-09',1,2,'四牌楼10-0-108','83792361',1);
insert into Employees values('020018','李丽','大专','1960-07-30',0,6,'中山东路102-2','83413301',1);
insert into Employees values('102201','刘明','本科','1972-10-18',1,3,'虎距路100-2','83606608',5);
insert into Employees values('102208','朱骏','硕士','1965-09-28',1,2,'牌楼巷5-3-106','84708817',5);
insert into Employees values('108991','钟敏','硕士','1979-08-10',0,4,'中山路10-3-105','83346722',3);
insert into Employees values('111006','张石兵','本科','1974-10-01',1,1,'解放路34-1-203','84563418',5);
insert into Employees values('210678','林涛','大专','1977-04-02',1,2,'中山北路24-35','83467336',3);
insert into Employees values('302566','李玉珉','本科','1968-09-20',1,3,'热和路209-3','58765991',4);
insert into Employees values('308759','叶凡','本科','1978-11-18',1,2,'北京西路3-7-52','83308901',4);
insert into Employees values('504209','陈林琳','大专','1969-09-03',0,5,'汉中路120-4-12','84468158',4);
go
create function useif
(@p char(3))
returns nvarchar(10)
as
begin
declare @s nvarchar(10)
if @p=1
set @s='财务部'
else if @p=2
set @s='人力资源部'
else if @p=3
set @s='经理办公室'
else if @p=4
set @s='研发部'
else if @p=5
set @s='市场部'
return @s
end
go
select EmployeeID,Name,Address,Pepartment=dbo.useif(Pepartment)
from Employees
/*
EmployeeID Name Address Pepartment
---------- ------ ---------------------------------------- ----------
000001 王林 中山路32-1-508 人力资源部
010008 伍容华 北京东路100-2 财务部
020010 王向容 四牌楼10-0-108 财务部
020018 李丽 中山东路102-2 财务部
102201 刘明 虎距路100-2 市场部
102208 朱骏 牌楼巷5-3-106 市场部
108991 钟敏 中山路10-3-105 经理办公室
111006 张石兵 解放路34-1-203 市场部
210678 林涛 中山北路24-35 经理办公室
302566 李玉珉 热和路209-3 研发部
308759 叶凡 北京西路3-7-52 研发部
504209 陈林琳 汉中路120-4-12 研发部

(12 行受影响)

*/
go
drop table Employees
drop function dbo.useif
annan211 2011-10-30
  • 打赏
  • 举报
回复
可是题目硬性要求使用if语句啊 这可不好办了 可能存在这种方法 只是我没想到 不过还是很感谢大家的热心帮忙 继续熬一下 我看还能不能想得到
中国风 2011-10-30
  • 打赏
  • 举报
回复
  Create table Pepartment(ID int,PepartmentName nvarchar(50))

insert Pepartment select 1 , '财务部'
insert Pepartment select 2 , '人力资源部'
insert Pepartment select 3 , '经理办公室'
insert Pepartment select 4 , '研发部'
insert Pepartment select 5 , '市场部'


go

select
*,
b.PepartmentName as Pepartment
from Employees as a
inner join Pepartment as b on a.Pepartment=b.ID
-晴天 2011-10-30
  • 打赏
  • 举报
回复
用CASE 好好的,为什么一定要用什么if呢.
如果一定不能用case 可以考虑用replace:
select EmployeeID,Name,Address,Pepartment=
replace(replace(replace(replace(replace(ltrim(pepartment),'1','财务部'),'2','人力资源部'),'3','经理办公室'),'4','研发部'),'5','市场部')
from Employees

不过这必须保证pepartment只是一位的0-9之间的数字.
中国风 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 annan211 的回复:]

死了 那我真的不知道该怎么用了 大侠帮个忙吧
[/Quote]

select 不可以加if 判断,只可用case when

如果这转换经常用,你用一个表记录 1--》部门
查询时连接查询就行了
annan211 2011-10-30
  • 打赏
  • 举报
回复
死了 那我真的不知道该怎么用了 大侠帮个忙吧
--小F-- 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 annan211 的回复:]
select EmployeeID,Name,Address,Pepartment
if Pepartment=1
begin
set Pepartment= '财务部'
end
else if Pepartment=2
begin
set Pepartment= '人力资源部'
end
else if Pepartment= 3
begin
set Pe……
[/Quote]

不能这么用的
annan211 2011-10-30
  • 打赏
  • 举报
回复
roy_88
四楼的大侠 可不可以再说的明白点啊 我有点不明白
中国风 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 annan211 的回复:]

是一条语句 是if嵌套
[/Quote]
楼主,这不是MySQL啊

在 select 处不可用if 代替用法是 Case when
annan211 2011-10-30
  • 打赏
  • 举报
回复
select EmployeeID,Name,Address,Pepartment
if Pepartment=1
begin
set Pepartment= '财务部'
end
else if Pepartment=2
begin
set Pepartment= '人力资源部'
end
else if Pepartment= 3
begin
set Pepartment= '经理办公室'
end
else if Pepartment=4
begin
set Pepartment= '研发部'
end
else if Pepartment=5
begin
set Pepartment= '市场部'
end
from Employees
我试着写了一条 可是提示错误
消息 102,级别 15,状态 1,第 1 行
'=' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'=' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'=' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'=' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'=' 附近有语法错误。
annan211 2011-10-30
  • 打赏
  • 举报
回复
是一条语句 是if嵌套
--小F-- 2011-10-30
  • 打赏
  • 举报
回复
是不是一个语句 如果是一个语句 if 是做不了的
中国风 2011-10-30
  • 打赏
  • 举报
回复
不想用,也可用 Pepartment=replace(replace(replace(replace(replace(rtrim(Pepartment),'1','财务部'),'2','人力资源部'),'3','经理办公室'),'4','研发部'),'5','市场部')
中国风 2011-10-30
  • 打赏
  • 举报
回复
在这里用case when 是比较简洁的方法

-晴天 2011-10-30
  • 打赏
  • 举报
回复
如果是一个语句,不能用 if 代替case when
加载更多回复(1)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧