【问题标题】:I want to replace a result from a Query with my own value of choice我想用我自己选择的值替换查询的结果
【发布时间】:2018-03-02 21:42:16
【问题描述】:

我正在使用来自 IBM DB2 的 QMF,并且我有一个简单的查询

SELECT * 
FROM COUNTRYTABLE

我得到的结果不是像 US、Germany 这样的名称,而是像 123、456 这样的结果,因为我们使用的是国家/地区代码。

没有一个表可以命名为“德国”,所以我无法加入以获得我想要的结果。

有没有办法将 123 的值切换/替换为德国?我知道我们可以将其用于以 Country 作为国家的列名称,但我不确定查询的结果。

我没有管理权限,我只是一个普通用户,所以对我来说没有花哨的东西。

我尝试在网上搜索,但我什至不知道如何表达这个问题。

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    我会制作表格,但是.. 如果您无法访问,您可以使用 CASE 语句:

    SELECT 
        CASE WHEN country_Code=123 THEN 'Germany'
            WHEN country_Code =124 THEN 'Spain'
            ELSE country_Code
            END as Country,
        Column2,
        Column3
    FROM CountryTable;
    

    我不记得 DB2 中的 CTE 是否允许不带 FROM 的 SELECTS,但如果允许,您也可以考虑创建一个 CTE 并将其作为另一个选项加入:

    WITH country AS
    (
        SELECT 123 as country_code, CAST('germany' as varchar(50)) as country_name
        UNION ALL SELECT 124, 'Spain'
        UNION ALL SELECT 125, 'Portugal'
    )
    SELECT
        country.country_name,
        countryTable.column2,
        countryTable.column3
    FROM
        countryTable
        LEFT OUTER JOIN country 
            ON countryTable.country_code = country.country_code;
    

    【讨论】:

    • 这个有效。我也会尝试解码一个,谢谢,不知道 CASE sintax
    【解决方案2】:

    理想情况下,您需要一个查找表

    例如国家

    CODE | COUNTRY
    123  | GERMANY
    124  | SPAIN
    

    等等。

    那么你可以像这样加入:

    SELECT *
    FROM COUNTRYTABLE
     JOIN COUNTRY ON COUNTRY_CODE = CODE
    

    【讨论】:

    • 他说他是没有管理员权限的用户,所以不可能创建查找表。
    【解决方案3】:

    你可以使用 DECODE 来做这件事吗?

    SELECT
        DECODE(COUNTRY_CODE,
            123, 'GERMANY',
            124, 'SPAIN',
            ...
            COUNTRY_CODE) as COUNTRY,
        Column2,
        Column3
    FROM countrytable;
    

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 2021-08-18
      • 2016-10-04
      • 1970-01-01
      • 2018-02-05
      • 2014-06-03
      • 2022-01-17
      • 2021-04-08
      相关资源
      最近更新 更多