问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求助,如何在SELECT语句中加上IF判断

发布网友 发布时间:2022-04-11 10:23

我来回答

3个回答

热心网友 时间:2022-04-11 11:52

例:

select *,if(sva=1,"男","女") as ssva from tableame where id =1

Quote

控制流程函数


CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 

在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。



sql> SELECT CASE 1 WHEN 1 THEN 'one'



-> WHEN 2 THEN 'two' ELSE 'more' END;



-> 'one'



sql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;



-> 'true'



sql> SELECT CASE BINARY 'B'



-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;



-> NULL


一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果味字符串。如果用在数字语境中,则返回结果为十进制值、实值或整数值。 



IF(expr1,expr2,expr3) 


如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。



sql> SELECT IF(1>2,2,3);



-> 3


sql> SELECT IF(1<2,'yes ','no');



-> 'yes'



sql> SELECT IF(STRCMP('test','test1'),'no','yes');



-> 'no'



如果expr2 或expr3中只有一个明确是 NULL,则IF() 函数的结果类型 为非NULL表达式的结果类型。 



expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。 



sql> SELECT IF(0.1,1,0);


-> 0



sql> SELECT IF(0.1<>0,1,0);



-> 1



在所示的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比较结果使用整数。 



IF() (这一点在其被储存到临时表时很重要 ) 的默认返回值类型按照以下方式计算: 



表达式
返回值



expr2 或expr3 返回值为一个字符串。


字符串



expr2 或expr3 返回值为一个浮点值。


浮点


expr2 或 expr3 返回值为一个整数。 


整数



假如expr2 和expr3 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。


http://blog.knowsky.com/


IFNULL(expr1,expr2) 


假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。 


sql> SELECT IFNULL(1,0);



-> 1



sql> SELECT IFNULL(NULL,10);



-> 10



sql> SELECT IFNULL(1/0,10);



-> 10



sql> SELECT IFNULL(1/0,'yes');



-> 'yes'



IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:


CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;


在这个例子中,测试列的类型为 CHAR(4)。


NULLIF(expr1,expr2) 


如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。 


sql> SELECT NULLIF(1,1);



-> NULL



sql> SELECT NULLIF(1,2);


-> 1



注意,如果参数不相等,则 SQL 两次求得的值为 expr1

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……

热心网友 时间:2022-04-11 13:10

CASE表达式是在解决SQLServer查询问题上的一个强大的工具。你可能感觉到它在SELECT语句中的用法类似于IF/ELSE的处理。但是,相对与IF/ELSE,CASE表达式却没有那么多*。
在以下代码中将展示CASE表达式的用处:
l 消除在UPDATE行时的游标循环。
l 在使用聚集函数时,执行特殊处理。
l 不使用动态SQL的动态ORDER BY 和WHERE子句
让我们看看以下例子:
首先,先创建一个名为Customer的表并插入数据:
CREATE TABLE dbo.Customer
(
customerid INT IDENTITY PRIMARY KEY,
firstname VARCHAR(40) NOT NULL,
lastname VARCHAR(40) NOT NULL,
statecode VARCHAR(2) NOT NULL,
totalsales money NOT NULL DEFAULT 0.00
)

热心网友 时间:2022-04-11 14:45

CASE表达式是在解决SQLServer查询问题上的一个强大的工具。你可能感觉到它在SELECT语句中的用法类似于IF/ELSE的处理。但是,相对与IF/ELSE,CASE表达式却没有那么多*。
在以下代码中将展示CASE表达式的用处:
l 消除在UPDATE行时的游标循环。
l 在使用聚集函数时,执行特殊处理。
l 不使用动态SQL的动态ORDER BY 和WHERE子句
让我们看看以下例子:
首先,先创建一个名为Customer的表并插入数据:
CREATE TABLE dbo.Customer
(
customerid INT IDENTITY PRIMARY KEY,
firstname VARCHAR(40) NOT NULL,
lastname VARCHAR(40) NOT NULL,
statecode VARCHAR(2) NOT NULL,
totalsales money NOT NULL DEFAULT 0.00
)

INSERT INTO dbo.Customer(firstname, lastname, statecode, totalsales)
SELECT 'Thomas', 'Jefferson', 'VA', 100.00

INSERT INTO dbo.Customer(firstname, lastname, statecode, totalsales)
SELECT 'John', 'Adams', 'MA', 200.00

INSERT INTO dbo.Customer(firstname, lastname, statecode, totalsales)
SELECT 'Paul', 'Revere', 'MA', 300.00

INSERT INTO dbo.Customer(firstname, lastname, statecode, totalsales)
SELECT 'Ben', 'Franklin', 'PA', 400.00
GO

示例1:
由于报表展示的需要,在一个非范式化的表中增加一个所在州描述列。现在,你可以使用游标和来循环更新每一行。但是游标往往是性能杀手。你也可以使用大量UPDATE语句,但是这将导致程序非常臃肿。
对此,可以在一个UDPATE语句的SET 子句中使用带有CASE关键字来实现更有效的操作:
ALTER TABLE dbo.Customer ADD statedescription VARCHAR(50) NULL
GO
UPDATE dbo.Customer
SET stateDescription = CASE WHEN statecode = 'MA' THEN 'Massachusetts'
WHEN statecode = 'VA' THEN 'Virginia'
WHEN statecode = 'PA' THEN 'Pennsylvania'
ELSE NULL
END

示例2:
当我们需要统计所有来自Massachusetts州用户的数量及他们的平均总消费时。我们能*查询在仅仅是Massachusetts的客户。但这将使得在得到用户总数时语句变得臃肿,为此,可以在聚集函数中使用CASE表达式来得到特定信息:
SELECT COUNT(*) AS TotalCustomers,
SUM(CASE WHEN statecode = 'MA' THEN 1 ELSE NULL END) AS TotalMassCustomers,
AVG(CASE WHEN statecode = 'MA' THEN totalsales ELSE NULL END) AS TotalMassSales
FROM dbo.Customer
因为在聚集函数中,NULL值不参与计算,所以可以通过这个特性来获得我们想要的数据。

示例3:
第三个案例来自于我们的桌面,我们需要一个存储过程来被应用程序调用,但用户想根据第一个名字或者第二个名字排序。其中一个方法是使用动态SQL来解决这个问题,但是我们可以使用CASE来等价实现:
CREATE PROCEDURE dbo.getCustomerData @sortbyVARCHAR(9), @sortdirection CHAR(4)
AS
SET nocount ON

SELECT customerid, firstname, lastname, statecode, statedescription, totalsales
FROM dbo.Customer
ORDER BY
CASE @sortdirection
WHEN 'asc' THEN
CASE @sortby
WHEN 'firstname' THEN firstname
WHEN 'lastname' THEN lastname
END
END
ASC,
CASE @sortdirection
WHEN 'desc' THEN
CASE @sortby
WHEN 'firstname' THEN firstname
WHEN 'lastname' THEN lastname
END
END
DESC
GO

EXEC dbo.getCustomerData'lastname', 'desc'

示例4:
最后一个例子中与示例3相似,我们需要改动存储过程去查找特定州的客户,如果该参数被忽略,则返回所有客户的所在州。
ALTER PROCEDURE dbo.getCustomerData @sortby VARCHAR(9), @sortdirection CHAR(4), @statecode VARCHAR(2) = NULL
AS
SET nocount ON

SELECT customerid, firstname, lastname, statecode, statedescription, totalsales
FROM dbo.Customer
WHERE statecode = CASE WHEN @statecode IS NOT NULL THEN @statecode
ELSE statecode
END
ORDER BY
CASE @sortdirection
WHEN 'asc' THEN
CASE @sortby
WHEN 'firstname' THEN firstname
WHEN 'lastname' THEN lastname
END
END
ASC,
CASE @sortdirection
WHEN 'desc' THEN
CASE @sortby
WHEN 'firstname' THEN firstname
WHEN 'lastname' THEN lastname
END
END
DESC
GO

EXEC dbo.getCustomerData 'lastname', 'desc', 'MA'
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我要问一下掇刀医保局恢复正常上班吗? 医保卡是东宝区的怎么才能转到掇刀区 东宝人社局 医保局 空调扇和风扇有什么区别 ...上了技校,现在上了电大的大专,档案在自己手里怎么办? 高职扩招的档案从哪里来 专科没有毕业档案怎么办 技校没上完考上专科,档案怎么转 凉薯和红薯有什么区别 凉薯和山药一样吗 我是一名教师 评职称发表论文 不知道网上哪些机构好点 具体? 小叮当全部电影如何下载 西安大雁塔是不是有喷泉? 怎样下载小叮当啊? r9s连接iphone13超时 如何下载小叮当 求一封八百字左右的入团申请书。 叮当下载的软件如何安装? 初一入团申请书800字以上,原创嗷。不要让老师看出来 我在微粒贷借了4000己经逾期三百多天了,现在没钱还,我该怎么办? 西安大雁塔北广场的喷泉被誉为什么 怎样下载小叮当 大雁塔喷泉是世界之最 大雁塔的音乐喷泉有有多高呢? 急需入团申请书范文 腾讯叮当app下载不了 照相机成像应该是实像为什么可以照到平面镜的像 西安的大雁塔的喷泉几点开始? 怎样才能下载叮当呢? 西安的大雁塔和喷泉怎么样,值得一去吗? 叮当郎手表怎么下载应用 一名学习成绩不怎么好的初中生怎么写入团申请书? 为啥r9s连接不上苹果13分的热点 大雁塔,陕博,大唐芙蓉园水幕电影,广场喷泉,什么顺序游览 兰州市初二入团申请书 我学习较好 急急急 跪求 800字左右 腾讯叮当可以下载优酷视频软件么? 叮当宝APP 小叮当软件需要自己下载,还是手机自带 oppo find 7标准版在哪里下载小叮当的软件?? 除夕是一个独立的节日还是春节的一部分?- 觅缘app里怎么加微信? centos怎么改ip 这个海信的冰箱怎么保鲜温度调低海信冰箱上层不保鲜 39怎么分解质因数 分解15、21、25、27、33、35、39这几个质因数? 两个质数的积是39,这两个质数分别是什么? 两个质数的积是39,这两个质数分别是___和__ 39和53分解质因数? 把15 21 25 33 35 39分解成质因数 两个质数的积是39这两个质数分别是多少 把39分解质因数是 A.36=4*9 B.36=2*2*3*3 C.36=1*2*2*3*3