Sql server SQL Server 2012案例陈述

Sql server SQL Server 2012案例陈述,sql-server,case,Sql Server,Case,使用pubs db,我已经用UNION ALL创建了以下内容,但试图用CASE stmt做同样的事情 SELECT t.title_id AS 'Title ID', t.ytd_sales 'YTD Sales', t.price AS 'Original Price', 'New Price' = CASE t.ytd_sales WHEN (t.ytd_sales < 2500.00) THEN CONVERT(DECIMAL(9,2),R

使用pubs db,我已经用UNION ALL创建了以下内容,但试图用CASE stmt做同样的事情

SELECT 
t.title_id AS 'Title ID',
t.ytd_sales 'YTD Sales',
t.price AS 'Original Price',
          'New Price' = CASE t.ytd_sales
           WHEN (t.ytd_sales < 2500.00) THEN CONVERT(DECIMAL(9,2),ROUND   (t.price*1.15,2))
           WHEN (t.ytd_sales BETWEEN 2500.00 AND 10000.00) THEN CONVERT(DECIMAL(9,2),ROUND(t.price*1.10,2))
           WHEN (t.ytd_sales > 10000.00) THEN CONVERT(DECIMAL(9,2),ROUND(t.price*1.05,2))
           ELSE CONVERT(DECIMAL(9,2),ROUND(t.price*1.00,2))
        END

    FROM titles t  
    ;
选择
t、 标题id为“标题id”,
t、 年初至今销售额“年初至今销售额”,
t、 价格为“原价”,
“新价格”=案例t.ytd_销售额
当(t.ytd_销售额<2500.00)时,则转换(十进制(9,2),四舍五入(t.price*1.15,2))
当(t.ytd_销售额介于2500.00和10000.00之间)转换(十进制(9,2),四舍五入(t.price*1.10,2))
当(t.ytd_销售额>10000.00)时,则转换(十进制(9,2),四舍五入(t.price*1.05,2))
ELSE转换(十进制(9,2),四舍五入(t.price*1.00,2))
结束
从标题t
;
它不喜欢比较/特殊操作员。这甚至可以作为案例stmt吗?
谢谢

正如马丁·史密斯所指出的,从语法上来说,这个问题是一个重复的问题

此查询的正确语法为

SELECT 
t.title_id  AS [Title ID],
t.ytd_sales AS [YTD Sales],
t.price     AS [Original Price],
CASE  
       WHEN (t.ytd_sales < 2500.00) THEN CONVERT(DECIMAL(9,2),ROUND   (t.price*1.15,2))
       WHEN (t.ytd_sales BETWEEN 2500.00 AND 10000.00) THEN CONVERT(DECIMAL(9,2),ROUND(t.price*1.10,2))
       WHEN (t.ytd_sales > 10000.00) THEN CONVERT(DECIMAL(9,2),ROUND(t.price*1.05,2))
       ELSE CONVERT(DECIMAL(9,2),ROUND(t.price*1.00,2))
    END     AS [New Price]

FROM dbo.titles t  
;
选择
t、 标题id为[标题id],
t、 年初至今销售额作为[年初至今销售额],
t、 价格为[原价],
案例
当(t.ytd_销售额<2500.00)时,则转换(十进制(9,2),四舍五入(t.price*1.15,2))
当(t.ytd_销售额介于2500.00和10000.00之间)转换(十进制(9,2),四舍五入(t.price*1.10,2))
当(t.ytd_销售额>10000.00)时,则转换(十进制(9,2),四舍五入(t.price*1.05,2))
ELSE转换(十进制(9,2),四舍五入(t.price*1.00,2))
结束为[新价格]
来自dbo.t
;

冒着说教的风险:列别名应该放在方括号中(
作为[Title ID]
),而不是单引号(用于字符串文字)。Ref:

看起来您试图混合SQL中两种类型的
CASE
语句

SQL Server(Transact-SQL)中CASE语句的语法为:

场景1:当您有一个简单的逻辑,其中表达式将与提供的每个值进行比较时:

CASE expression

   WHEN value_1 THEN result_1
   WHEN value_2 THEN result_2
   ...
   WHEN value_n THEN result_n

   ELSE result

END

场景1:当您有更复杂的逻辑,需要评估的条件不同时:

CASE

   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n

   ELSE result

END

礼貌:

您可能会将案例陈述的两种形式混合在一起。非常感谢您,斯坦-感谢您为我提供的所有指导,因为我对这方面还不熟悉。感谢你的耐心!跟进-当然,你的调整很有魅力。再次感谢…我现在看到了我犯的所有错误!