2016-11-24 12 views
0

SQL:私はサンプルcounters.below 2上の2条件をテストする条件テスト

id_client | zipcode  | timestamp    | UC  | MISS 
--------------------------------------------------|--------|------ 
amar  | 11111  | 2016-09-28 20:05:03.001 | 15  | 0 
akbar  | 11111  | 2016-09-28 20:05:03.001 | 50  | 1 
antony | 11111  | 2016-09-28 20:07:03.001 | 110 | 0 
amar  | 11111  | 2016-09-28 20:08:03.001 | 5  | 1 

select 
    date (CollectionTime) as dates, 
    id_client 
    case when UC <=15 THEN 'TB' 
    UC < 15 THEN 'TB' 
    UC > 15 AND UC <=40 THEN 'B' 
    UC >40 AND UC <=80 THEN 'M' 
    UC > 80 THEN 'TM' 
    ELSE 'NULL' END AS tranche_UC 
    case when MISS = O THEN 'BONNE' 
    MISS =1 THEN 'Mauvaise' 
    ELSE 'NULL' END AS note 
from cm_stat 
group by id_client 
order by dates; 

i」は

id_clien | zipcode  | timestamp    | trancheUC | MISS 
--------------------------------------------------|--------  |------ 
amar  | 11111  | 2016-09-28 20:05:03.001 | TB   | 0 
akbar  | 11111  | 2016-09-28 20:05:03.001 | M   | 1 
antony | 11111  | 2016-09-28 20:07:03.001 | TM   | 0 
amar  | 11111  | 2016-09-28 20:08:03.001 | TB   | 1 

答えて

2

あなたのクエリはあなたがする最後の列をしたいことを示唆していることが期待サンプルが示しているように、bonneまたはmauvaisであり、1または0ではありません。私はボンとmauvaisと一緒に行きます。

:ここでは、構文エラーのないクエリの CASE

ですべての条件についてWHENを必要id_client

  • 後にカンマが欠落している

    1. まず第一に、あなたは、いくつかの構文エラーを持っています

      select 
          date (CollectionTime) as dates, 
          id_client, -- missing comma 
          case 
          when UC <=15 THEN 'TB' 
          when UC < 15 THEN 'TB' -- needed WHEN (use before every condition) 
          when UC > 15 AND UC <=40 THEN 'B' -- needed WHEN 
          when UC >40 AND UC <=80 THEN 'M' -- needed WHEN 
          when UC > 80 THEN 'TM' -- needed WHEN 
          ELSE 'NULL' END AS tranche_UC 
          case 
          when MISS = O THEN 'BONNE' 
          when MISS =1 THEN 'Mauvaise' -- needed WHEN 
          ELSE 'NULL' END AS note 
      from cm_stat 
      group by id_client 
      order by dates; 
      

      は今、構文はすべてのセットで、あなたには、いくつかの論理エラーを持っていること:

      1. UCロジックは行き過ぎである
      2. (たとえば、TBを返すように< = 15 < 15のチェック)私にはありません

        select 
            date (CollectionTime) as dates, 
            id_client, 
            case 
            when UC <=15 THEN 'TB' 
            when UC <=40 THEN 'B' 
            when UC <=80 THEN 'M' 
            when UC > 80 THEN 'TM' 
            ELSE 'NULL' END AS tranche_UC 
            case 
            when MISS = O THEN 'BONNE' 
            when MISS = 1 THEN 'Mauvaise' 
            ELSE 'NULL' END AS note 
        from cm_stat 
        order by dates; 
        
        :あなたはgroup by id_client

      だからここはまっすぐロジックを持つクエリの持っている理由を理解します

  • +0

    ありがとう、それは働いている@エドギブス – lalarita