SQL语句中CASE有哪些用法
在写SQL语句时,或者是在PL/SQL中,经常需要在一个SQL语句中,根据不同的条件,有多种处理方法,如简单例子:出售一种商品时,单价不同,折扣不同,对这种需求的处理,如果分情况处理,将会很麻烦,如果用Case语句,就可以在一条SQL语句中得到想要的结果。
首先看一下,Case的语法: case when 条件A Then 结果A When 条件B 结果B 。
.. else 结果N end 和Decode 不同的是,Decode 只能针对固定的值,而 Case 可以用不是固定值,需是一个条件。 现在有以下的需求,有一个字符串,最后的两位可能是 ‘/R’ ,’/T’ 另外,有的后两位没有前面的’/R’ ,’/T’ ,现在针对不同的需要,要将 ‘/R’ ,’/T’ 取掉,没有 ‘/R’ ,’/T’, 就不做处理。
具体字符串如下: A01JCLA01JCL/GF117F0001TR/R SQL写法可以如下: select (case when instr(code, ‘/R’) > 0 then substr(code, 1, instr(code, ‘/R’) 1) when instr(code, ‘/T’) > 0 then substr(code, 1, instr(code, ‘/T’) 1) else ‘0’ end) from table_A t ; 使用Case时,要用括号括起来。
SQL语句中Case 的用法
不用CASE WHEN 的做法。源代码如下:
string sql=”select * from CONTACTPERSON ,CUSTOMER where CONTACTPERSONID='”+strContactid+”‘ and *ERID=*ERID”;
DataSet ds=new DataSet();
ds=*ommon(sql);
if(*[0].Rows[0][“CONTACTPERSONSEX”].ToString()==”0″)
{
*[0].Rows[0][“CONTACTPERSONSEX”]=”男”;
}
else
{
*[0].Rows[0][“CONTACTPERSONSEX”]=”女”;
}
使用CASE WHEN做法。
string sql=”select CUSTOMER.*,*TPERSONNAME,*TPERSONBIRTHDAY,*TPERSONPOSITION,*TPERSONDEPTNAME,”;
sql+=”*ONE,*,*,*CE,*DE,*Y,*,”;
sql+=”*OR,”;
sql+=”case when *TPERSONSEX = ‘0’then ‘男’ when *TPERSONSEX= ‘1’ then ‘女’ end as CONTACTPERSONSEX from CUSTOMER ,CONTACTPERSON where CONTACTPERSONID='”+strContactid+”‘ and *ERID=*ERID”;
可以看出这样明显加长了,SQL语句,这样做有什么好处呢?不太清楚,可能会提高效率吧。大家的看法呢?
sql语句case的用法
select case when stcd=’stcd’ and tm between ‘d1′ and convert(varchar(100),year(dateadd(day,1,’d1’)))
+”+convert(varchar(100),month(dateadd(day,1,’d1′)))
+”+convert(varchar(100),day(dateadd(day,1,’d1′)))
+’ 8:00:00′ then sum(drp) when stcd=’stcd’ and tm between convert(varchar(100),year(dateadd(day,1,’d1′)))
+”+convert(varchar(100),month(dateadd(day,1,’d1′)))
+”+convert(varchar(100),day(dateadd(day,1,’d1′)))
+’ 9:00:00′ and ‘d1’ then sum(drp) end drpsum from st_pptn_r你把’stcd’和’d1’换成具体值,试试看。
SQL语句case when
太长了,但是看到一个问题,case when,要求返回的类型必须一直。
你看你的第一个case when语句(case when to_char(statistic_datepayrefdate>=0) and to_char(statistic_datepayrefdate<90) then sum(*envl(*fee,0)) else '' end)then后边返回的是一个求和,那么类型肯定是数字,而else分支,其他情况下居然返回了空字符串,字符型。这两个不一致,首先就错了。
你先改了这些吧。
SQL case when 语句
求总发卡数和总制卡数和发卡正式卡数、发卡临时卡数、发卡正式卡数,制卡临时卡数、制卡正式卡数(如Excel中所示)求详细SQL语句。
创建测试表
IF EXISTS (SELECT * FROM *s WHERE object_id = OBJECT_ID(N'[dbo].[TB]’) AND type in (N’U’))
DROP TABLE [dbo].[TB1]
GO
CREATE TABLE [dbo].[TB1](
[卡状态] [nvarchar] (20) NULL,
[卡类型] [nvarchar](50) NULL,
) ON [PRIMARY]
GO
插入测试数据
INSERT INTO [TB1] ([卡状态],[卡类型])
SELECT N’发卡’,N’正式卡’ UNION ALL
SELECT N’发卡’,N’正式卡’ UNION ALL
SELECT N’发卡’,N’临式卡’ UNION ALL
SELECT N’制卡’,N’临式卡’ UNION ALL
SELECT N’制卡’,N’正式卡’
GO
静态拼接行转列(纠正简化一下)
SELECT 卡状态 + ‘数’ AS 卡状态,
COUNT(1) AS 总数 ,
SUM(CASE WHEN 卡类型 = ‘正式卡’ THEN 1
ELSE 0
END) AS 正式卡 ,
SUM(CASE WHEN 卡类型 = ‘临式卡’ THEN 1
ELSE 0
END) AS 临式卡
FROM TB1
GROUP BY 卡状态
GO
输出结果:
sql语句中的Case如何使用
方法一:select (case TitleOfCourtesy when ‘Ms.’ then ‘女士’ when ‘Mr.’ then ‘男士’ else ” end) as TitleOfCourtesy from *ees方法二:select (case when TitleOfCourtesy = ‘Ms.’ then ‘女士’ when TitleOfCourtesy = ‘Mr.’ then ‘男士’ else ” end) as TitleOfCourtesy from *ees这是网上查的。
呵呵。
sql语句中的Case如何使用
方法一:
select (case TitleOfCourtesy when ‘Ms.’ then ‘女士’ when ‘Mr.’ then ‘男士’ else ” end) as TitleOfCourtesy from *ees
方法二:
select (case when TitleOfCourtesy = ‘Ms.’ then ‘女士’ when TitleOfCourtesy = ‘Mr.’ then ‘男士’ else ” end) as TitleOfCourtesy from *ees
这是网上查的。呵呵