Select Query SQL Server 中的 IF 子句用法
Posted
技术标签:
【中文标题】Select Query SQL Server 中的 IF 子句用法【英文标题】:IF Clause usage in Select Query SQL Server 【发布时间】:2017-09-07 10:42:39 【问题描述】:我想在 SELECT 查询中使用 IF 语句。这是示例。 我有 3 个表格,其中保存客户信息、型号信息和库存。我想为每个客户提供最合适的模型。因此,在我的第一次尝试中,如果客户收入低于 5000,我想提供该商店中存在的廉价型号,否则该商店中的任何型号。 但我不能在 SELECT WHERE 部分使用 IF clouse。
SELECT TOP 1 @vmodel = stocks.model , @vsloc = stocks.sloc , @vyear = models.year , @vcost = models.cost <br>FROM bistore.dbo.stocks
JOIN bistore.dbo.models
ON stocks.model = models.model
WHERE stocks.sloc<>'Main'
AND stocks.stock > 0
AND models.mat IN (
IF (@vincome<5000) SELECT DISTINCT mat from models where mat<>'Carbon'
ELSE SELECT DISTINCT mat from models
) /* If income is less than 5000 than chose cheap models , else whatever ) */
** 更新 ** 当客户登录我的门户网站时,我想为他/她提供最适合他的模型。我会检查他的收入,在他附近储存库存并在横幅上提供给他。这是我的表格样本。
CustomerInfo
ModelInfo
声明@vcname VARCHAR(50) 声明 @vckids INT 声明 @vceng INT 声明 @vcweig INT 声明 @vcincome INT 声明 @vyear INT 声明 @vcost INT
SELECT TOP 1 @vcname = nmsnm , @vckids = kids , @vcleng = leng, @vcweig = weig , @vcincome = 来自客户的收入 ORDER BY id DESC 声明 @vmodel VARCHAR(50) 声明 @vsloc VARCHAR(50) SELECT TOP 1 @vmodel = stock.model ,@vsloc = stock.sloc ,@vyear = models.year ,@vcost = models.cost FROM bistore.dbo.stocks 加入 bistore.dbo.models ON stock.model = models.model WHERE stock.sloc'主要' AND stock.stock > 0 AND models.mat IN ( IF (@vincome'Carbon' END ELSE BEGIN SELECT DISTINCT mat from models END ) /* 如果收入低于 5000 比选择便宜的型号,否则随便 ) / AND models.frames IN (SELECT frames from models where frames 选择适合长度的模型/ AND models.type 'Kids Bike' / 如果有孩子,随便选(不大于长度)*/ 按 NEWID() 排序
【问题讨论】:
你能给我们一些样本数据和预期结果吗 【参考方案1】:您不需要IF
或CASE
,只需要一个额外的AND
和一个反向的@vincome
支票:
SELECT TOP 1
@vmodel = stocks.model ,
@vsloc = stocks.sloc ,
@vyear = models.year ,
@vcost = models.cost <br>
FROM bistore.dbo.stocks
JOIN bistore.dbo.models
ON stocks.model = models.model
WHERE stocks.sloc <>'Main'
AND stocks.stock > 0
AND ( @vincome >= 5000 OR models.mat <> 'Carbon' )
您发现您甚至不需要子查询。
【讨论】:
【参考方案2】:在 mysql 中是 CASE 语句,其详细信息为 here。
一种可能的用法(请参阅您的对象以了解正确的语法):
SELECT TOP 1 @vmodel = stocks.model , @vsloc = stocks.sloc , @vyear = models.year , @vcost = models.cost <br>FROM bistore.dbo.stocks
JOIN bistore.dbo.models
ON stocks.model = models.model
WHERE stocks.sloc<>'Main'
AND stocks.stock > 0
AND models.mat IN (
CASE sign(@vincome - 5000)
WHEN -1 then (SELECT DISTINCT mat from models where mat<>'Carbon')
ELSE '(SELECT DISTINCT mat from models )
END
) /* If income is less than 5000 than chose cheap models , else whatever ) */
PS:符号是我用来模仿更大/相等/更小的控制以更好地理解 CASE 语法的技巧。
【讨论】:
以上是关于Select Query SQL Server 中的 IF 子句用法的主要内容,如果未能解决你的问题,请参考以下文章
Sql Query 列出 SQL Server 2005 数据库中的所有视图
SQL Server 2008R2 用户定义函数(表值)性能