首页 > 解决方案 > 在 Oracle SQL 中结合 CASE WHEN 语句和包含“Column 1 || '_' || Column 2”类型字符串的列

问题描述

我有一个由三列组成的表,它们被称为以下内容:

1) 月 2) Store_Type 3) 城市

我需要将此表扩展为包含五列,下面详细介绍我希望添加的两列。

首先,查询需要创建一个名为 Store_Code 的新列。Store_Code 列的工作是存储一个与它是什么类型的存储相对应的数值。

我认为这将使用以下类型的 CASE WHEN 语句来完成:

SELECT Month,Store_Type,City,
CASE
WHEN Store_Type = 'Corner Shop' THEN '1'
WHEN Store_Type = 'Megastore' THEN '2'
WHEN Store_Type = 'Petrol Station' THEN '3'
....
ELSE '10'
END Store_Code
FROM My_Table

完成后,我需要创建一个名为“Store_Key”的列。Store_Key 列中包含的值需要采用以下形式:

"该行的月份" "该行的商店类型" "与该行关联的城市"_"该行的商店代码"

我想创建此列的最佳方法是使用类似于以下内容的查询:

SELECT (My_Table.Month || '_' || My_Table.Store_Type || '_' || My_Table.City || '_' || 
My_Table.Store_Code)
FROM My_Table

我需要将这两个单独的查询组合成一个查询。我想这可以通过对不同的 SELECT 查询进行子设置来完成,但我对任何替代解决方案持开放态度并表示感谢。

感谢您花时间阅读此问题,非常感谢所有解决方案。

标签: sqloracle

解决方案


在派生表(子查询)中执行case 表达式部分:

SELECT (My_Table2.Month || '_' || My_Table2.Store_Type || '_' || My_Table2.City || '_' || 
My_Table2.Store_Code)
FROM
(
    SELECT Month,Store_Type,City,
    CASE
    WHEN Store_Type = 'Corner Shop' THEN '1'
    WHEN Store_Type = 'Megastore' THEN '2'
    WHEN Store_Type = 'Petrol Station' THEN '3'
    ....
    ELSE '10'
    END Store_Code
    FROM My_Table
) My_Table2

推荐阅读