【问题标题】:Case in a Where ClauseWhere 子句中的案例
【发布时间】:2015-09-21 16:26:45
【问题描述】:

我是 SQL 新手,我正在尝试理解 CASE 子句。我想在清点商品时在部门代码旁边的报告中打印部门名称。你能告诉我我做错了什么吗?谢谢。

SELECT  
DEPT_C AS "DEPT CODE",
NAME as "DEPT NAME",
TO_CHAR(COUNT(*), '999,999,999,999') AS TOTAL 
FROM STORE.DEPT 
WHERE CASE  
WHEN DEPT_C = 'D01' THEN 'WOMAN ACTIVE WEAR' 
WHEN DEPT_C = 'D02' THEN 'WOMAN PLUS SIZE'
WHEN DEPT_C = 'D03' THEN 'JUNIORS'
WHEN DEPT_C = 'D04' THEN 'GIRLS'
WHEN DEPT_C = 'D05' THEN 'INFANTS AND TODDLERS'
WHEN DEPT_C = 'D06' THEN 'ACCESSORIES'
WHEN DEPT_C = 'D07' THEN 'JEWLERY'
WHEN DEPT_C = 'D08' THEN 'PERFUME'
WHEN DEPT_C = 'D09' THEN 'COSMETICS'
ELSE 'OTHER' END NAME
GROUP BY 1,2
ORDER BY 2,1;

【问题讨论】:

  • 谢谢,问题是我在哪里遇到了这种情况,它应该在 Select 中。我还固定了组。它工作正常,如下所示:
  • 选择 DEPT_C 作为“DEPT CODE”,(DEPT_C = 'D01' THEN 'WOMAN ACTIVE WEAR' WHEN DEPT_C = 'D02' THEN 'WOMAN PLUS SIZE' WHEN DEPT_C = 'D03' THEN' JUNIORS' 当 DEPT_C = 'D04' 然后是 'GIRLS' 当 DEPT_C = 'D05' 然后是 '婴幼儿' 当 DEPT_C = 'D06' 然后是'附件' 当 DEPT_C = 'D07' 然后是'JEWLERY' 当 DEPT_C = 'D08' THEN 'PERFUME' WHEN DEPT_C = 'D09' THEN 'COSMETICS' ELSE 'OTHER' END) DEPT_NAME, TO_CHAR(COUNT(*), '999,999,999,999') 来自 STORE.DEPT GROUP BY DEPT_C ORDER BY 2,1 的总计;跨度>

标签: sql case where


【解决方案1】:

CASE 视为switch 语句。

在这种情况下,您需要为每个部门代码使用不同的名称。因此,您的案例使用DEPT_C 列作为参考变量,并为各个代码分配名称值。

像这样:

SELECT  
DEPT_C AS "DEPT CODE",
CASE DEPT_C
WHEN 'D01' THEN 'WOMAN ACTIVE WEAR' 
WHEN 'D02' THEN 'WOMAN PLUS SIZE'
WHEN 'D03' THEN 'JUNIORS'
WHEN 'D04' THEN 'GIRLS'
WHEN 'D05' THEN 'INFANTS AND TODDLERS'
WHEN 'D06' THEN 'ACCESSORIES'
WHEN 'D07' THEN 'JEWLERY'
WHEN 'D08' THEN 'PERFUME'
WHEN 'D09' THEN 'COSMETICS'
ELSE 'OTHER' 
END as 'DEPT NAME'
FROM STORE.DEPT 

编辑:

你也可以忽略input expression,即DEPT_C,但是每个条件都应该是明确的,像这样:

SELECT  
DEPT_C AS "DEPT CODE",
CASE 
WHEN DEPT_C = 'D01' THEN 'WOMAN ACTIVE WEAR' 
WHEN DEPT_C = 'D02' THEN 'WOMAN PLUS SIZE'
WHEN DEPT_C = 'D03' THEN 'JUNIORS'
WHEN DEPT_C = 'D04' THEN 'GIRLS'
WHEN DEPT_C = 'D05' THEN 'INFANTS AND TODDLERS'
WHEN DEPT_C = 'D06' THEN 'ACCESSORIES'
WHEN DEPT_C = 'D07' THEN 'JEWLERY'
WHEN DEPT_C = 'D08' THEN 'PERFUME'
WHEN DEPT_C = 'D09' THEN 'COSMETICS'
ELSE 'OTHER' 
END as 'DEPT NAME'
FROM STORE.DEPT 

警告: 我更改了您的选择顺序,请务必相应地重写您的GROUP BYORDER BY

【讨论】:

    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多