2016-10-31 41 views
0

我的问题是,如果sales.cost是< 100则“特殊”否则,如果sales.cost => 100“常规”IF ELSE语句SQL查询新列使用SQL?

这里是我的查询

SELECT 
    List.Item, List.Department, List.Group, List.Cost, 
    [Query 2].Sales, [Query 2].Revenue, special 
FROM 
    [Sales Units], List 
INNER JOIN 
    [Query 2] ON List.Item = [Query 2].Item; 

最后一列是加法和这里一些更多的解释。

Special  if List.Cost 
    Special  Less than 100 
    Regular  100 or greater 

我gooled很多,但发现情况作为一个解决方案,但如果不提供合适的解决办法,如果你解决小益智我会心存感激

这里是我使用的情况下

SELECT 
    List.Item, List.Department, List.Group, List.Cost, 
    [Query 2].Sales, [Query 2].Revenue, Special, 
    CASE 
     WHEN [Query 2].Sales < 100 
      THEN Special = 'Special' 
     WHEN [Query 2].Sales => 100 
      THEN Special = 'Regular' 
    END 
FROM 
    [Sales Units], List 
INNER JOIN 
    [Query 2] ON List.Item = [Query 2].Item 
ORDER BY 
    List.Item; 
+1

(1)您是否使用SQL Server或MS访问?我删除了不兼容的数据库标签,因此您可以在其上添加权限。 (2)'案件'不起作用?你应该包括你的尝试(3)你为什么要将古老的连接语法(逗号)与适当的显式'join'语法混合? –

+0

这里你的问题是'then Special ='special'',新的字段名称必须在字段逻辑之前或之后提供:'Special = case ... end'或'case when ... end as Special' –

+0

@GordonLinoff是写,但告诉我如何显示其'l.Cost' feild货币格式与2小数 –

回答

3

MS访问不支持case。您需要使用iif()代替:

SELECT l.Item, l.Department, l.Group, l.Cost, 
     q.Sales, q.Revenue, 
     IIF(l.Cost < 100, 'Special', 'Regular') as special 
FROM List as l INNER JOIN 
    [Query 2] as q 
    ON l.Item = q.Item; 

我不认为你在查询需要[Sales Units]

在SQL Server或任何其他数据库中,确实应该使用case而不是数据库特定的函数。

+0

也设置一个带有2位小数的货币任何想法 –

+0

像'l.Cost'显示为带2位小数的货币 –

+0

若要将数字列格式化为MS Access中的货币,请使用[Ccur()](https://support.office。 com/en-us/article/Type-Conversion-Functions-8ebb0e94-2d43-4975-bb13-87ac8d1a2202),它将货币类型与用户的CPU区域设置对齐。 – Parfait

0

这是非常简单的:

[Special] = iif(IsNull(List.Cost, 0) < 100, 'Special', 'Regular') 
0

您可以修改查询是这样的:

SELECT List.Item, List.Department, List.Group, List.Cost, [Query 2].Sales, 
[Query 2].Revenue , 

CASE 
     WHEN [Query 2].Sales < 100 THEN 'Special' 
     WHEN [Query 2].Sales >= 100 THEN 'Regular' 

END as Special 

FROM [Sales Units], List INNER JOIN [Query 2] ON List.Item = [Query 2].Item; 

希望它能帮助。 :)

1
SELECT l.Item, 
     l.Department, 
     l.Group, 
     FormatCurrency(l.Cost,2,-2,-2,-2) as Cost, 
     q.Sales, 
     q.Revenue , 
     CASE WHEN l.Cost < 100 THEN 'Special' 
     ELSE 'REGULAR' END AS 'Special' 
FROM [List] l INNER JOIN [Query 2] q ON l.Item = q.Item; 

对于SQL使用FORMAT(l.Cost,'C','en-us')

+0

@GORDON LINOF答案是写你能告诉我如何编写成本值作为我将l.Cost'评价为2位小数和货币格式 –

+0

我编辑了答案。欲了解更多信息,请参阅https://msdn.microsoft。com/en-us/library/hh213505.aspx – yopez83

+0

'#错误'返回 –