【问题标题】:select rows and generate a new column based on condition SQL选择行并根据条件 SQL 生成新列
【发布时间】:2017-03-22 02:29:20
【问题描述】:

我在 Oracle 中有下表

Company   Rate   Period
1A        10     sep-16
1B        20     sep-15
1C        30     oct-16
1D        40     sep-16
1A        50     oct-16
2B        50     sep-15
1C        60     oct-14

我想选择一些行并根据条件添加一个值。所以结果将类似于以下内容:

Company   Rate   Period    Currency
1A        50     oct-16    USD
1C        30     oct-16    AED

在上表中,我只选择了公司 1A、1C,其中 Period ='oct-16'。我需要为每家公司添加一列“货币”,其中 1A=USD, 1C=AED

我所做的是:

select company, PERIOD , Rate 
from TABLE_test 
where period='Oct-16' And Company='1A' 
    OR period='Oct-16' and Company='1C';

我设法找到了这些公司,但在货币栏目中失败了。这可能使用 SQL 命令吗?请帮忙。

【问题讨论】:

  • 您想像这样对货币进行硬编码,还是有一个包含“公司”和“货币”的查找表?希望是后者,在这种情况下,您需要加入查找表。
  • @mathguy 我在其他桌子上没有货币。我只认识他们=)

标签: sql oracle select


【解决方案1】:

是的,可以使用 case 条件:

    SELECT COMPANY,RATE,PERIOD,(CASE WHEN COMPANY='1A' THEN 'USD' 
                                     WHEN COMPANY='1C' THEN 'AED' END
                                    )CURRENCY
    FROM TABLE_TEST
    WHERE PERIOD='oct-16'
    AND COMPANY IN ('1A','1C')

【讨论】:

  • 这太棒了!!谢谢
【解决方案2】:
select company, PERIOD , Rate,
(CASE WHEN Company ='1A' THEN 'USD' WHEN Company ='1C' THEN 'AED'  END) "Currency"
from TABLE_test where...

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT Company, Rate, Period, 
      CASE WHEN Company='1A' 
        THEN 'USD' 
        WHEN Company='1C' 
        THEN 'AED' 
      END as Currency
    FROM TABLE_test
    WHERE Period = 'oct-16'
    

    【讨论】:

    • 谢谢。但我的问题是生成货币列。你能帮忙吗?
    • CASE 表达式周围的括号是不需要的(至少在 Oracle 中不需要)。
    • @ShB,你可以支持我的回答。 :) 很高兴帮助你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2022-12-20
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多