2016-07-14 13 views
0

sql select文の結果は以下のようになります。計算列

select * from table 

Location Role    Days 
----------------------------------- 
Hong Kong Senior Associate 48 
Canberra Senior Associate 60 
Sydney  Senior Associate 55 

私は上記の結果に列を追加したい - Hours(SQLには時間列がありませんサーバーテーブル)。

Hours香港場合キャンベラ次いでデイズ/ 7.5

  • シドニー次いでデイズ/ 7.25
  • 結果もしあれば、日/ 7

  • 位置

    • に基づいcalculcatedされるべきです次のようになります。

      Location Role    Days Hours 
      ----------------------------------------- 
      Hong Kong Senior Associate 48 6.85 
      Canberra Senior Associate 60 8 
      Sydney  Senior Associate 55 7.586 
      

      私はselect caseで試してみましたが、これは1つの条件(ifとelse)とデータベースの列のみをチェックします。

      select 
          case 
           when location = 'Sydney' 
            then Days/7 
           else Days/7.5 
          end as Hours 
      

      しかし、私はすべて1つのSQL文でチェックし、データベースにない時間列を追加する条件にしたいと思います。

      お願いします。

  • +1

    あなたは 'case'を使って質問を表示するべきです。 –

    +0

    確かに、場所が 'シドニー'の場合、 – user1282609

    +0

    を選択すると表示されます 日/ 7 その他の日/ 7.5 \t \t end as Hour – user1282609

    答えて

    5

    caseがこれを解決します

    select location, role, days, 
         (case when location = 'Hong Kong' then days/7.0 
          when location = 'Canberra' then days/7.5 
          when location = 'Sydney' then days/7.25 
         end) as hours 
    from t; 
    

    あなたも、計算列を使用して、テーブルにこの列を追加することができます。

    alter table t 
        add hours as (case when location = 'Hong Kong' then days/7.0 
             when location = 'Canberra' then days/7.5 
             when location = 'Sydney' then days/7.25 
            end); 
    
    1

    あなたの問合せ:

    SELECT ... 
         (CASE when location = 'Hong Kong' then days/7.0 
          when location = 'Canberra' then days/7.5 
          when location = 'Sydney' then days/7.25 
         end) AS Hours 
    

    あなたがすることができますLOWER()またはUPPER()を使用して大文字と小文字を区別するマッチングのようなLOWER(location) = LOWER('Hong Kong')

    希望するこれは助けて!