Access IIF 到 SQL 语句的转换

Posted

技术标签:

【中文标题】Access IIF 到 SQL 语句的转换【英文标题】:Access IIF to SQL Statement convert 【发布时间】:2015-05-20 15:48:24 【问题描述】:

我有访问查询,我正在将其转换为 TSQL(SQL Server)。我正在寻找与 SQL Server 中的 Access IIF 语句等效的语句。

以下是我要转换的语句;

IIF(((ISNULL([Total], 0) * [SellThrough])/100)/IIF(ISNULL([NoOfStores], 0) = 0, 1, ISNULL([NoOfStores], 0))/IIF(ISNULL([FPWeeksOfSelling], 0) =
                 0, 1, ISNULL([FPWeeksOfSelling], 0)) < 0.1, 0, ((ISNULL([Total], 0) * [SellThrough])/100)/IIF(ISNULL([NoOfStores], 0) = 
                 0, 1, ISNULL([NoOfStores], 0))/IIF(ISNULL([FPWeeksOfSelling], 0) = 0, 1, ISNULL([FPWeeksOfSelling], 0)))

我尝试使用 Case 但我无法编写它。您能否将上述查询转换为 CASE 语句。

【问题讨论】:

【参考方案1】:

这很丑,但试试看:

CASE WHEN ((ISNULL([Total], 0) * [SellThrough]) / 100) / 
    CASE WHEN ISNULL([NoOfStores], 0) = 0 THEN 1 ELSE ISNULL([NoOfStores], 0) END 
    / CASE WHEN ISNULL([FPWeeksOfSelling], 0) = 0 THEN 1 ELSE ISNULL([FPWeeksOfSelling], 0) END < 0.1 THEN  0 ELSE 
((ISNULL([Total], 0) * [SellThrough]) / 100) / CASE WHEN ISNULL([NoOfStores], 0) = 0 THEN 1 ELSE ISNULL([NoOfStores], 0) END / CASE WHEN ISNULL([FPWeeksOfSelling], 0) = 0 THEN 1 ELSE ISNULL([FPWeeksOfSelling], 0) END END

【讨论】:

【参考方案2】:

如何在 sql server 中更改此查询

    ("select IIF(MAX(bill_bno) IS NULL,1,MAX(bill_bno)+1) from rec_all 
where rw=0 and iif(month(bill_date)>=1 AND month(bill_date)=3,
year(bill_date)-1, year(bill_date))=" & IIf(Month(Date) >= 1 AND Month(Date) <= 3, Year(Date) - 1, Year(Date))) 

【讨论】:

以上是关于Access IIF 到 SQL 语句的转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MS Access“IIF”查询转换为 Sql Server 查询?

SQL 查询语句 IIF()处理条件判断

SQL 查询语句 IIF()处理条件判断

oracle sql developer中的IIF语句

如何使用SQL语句,实现多条件分组统计

将 Access SQL 转换为 MySQL