2016-11-24 43 views
0

我想測試2的條件在兩個counters.below樣本:SQL:條件測試

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; 

我」預計將有

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

你的查詢會暗示你想要的最後一列如bonnemauvais而不是1或0,如示例所示。我會去與bonne和mauvais。

首先你有一些語法錯誤:

  1. 缺少逗號後id_client
  2. 需要爲每個條件WHENCASE

這裏是沒有語法錯誤的查詢:

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邏輯過頭了(例如,檢查< = 15 < 15返回TB
  2. 我不明白你爲什麼有group by id_client

因此,這裏是一個與邏輯查詢理順:

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; 
+0

謝謝,它正在工作。@ Ed Gibbs – lalarita