SQL實現value爲1,2,3轉換爲值

表結構以下:spa

字典表 common_dictcode

 

訂單表 work_orderorm

如今須要把work_order表裏的異常狀態查詢顯示爲漢字blog

SELECT w.order_no,GROUP_CONCAT(cd.label) AS abnormal_status
    FROM common_dict cd JOIN work_order w ON 1 =1 
 WHERE cd.type LIKE '%abno%'
     AND INSTR(w.abnormal_status,cd.`value`)> 0 
 GROUP BY w.order_no;

查詢結果以下:class

如今須要按這個異常字段查詢,若是直接加where條件,代碼以下:im

SELECT w.order_no,GROUP_CONCAT(cd.label) AS abnormal_status
    FROM common_dict cd RIGHT JOIN work_order w ON 1 =1 AND cd.type = 'abnormal_status' AND INSTR(w.abnormal_status,cd.`value`)> 0 
   WHERE cd.label in('運輸超時')
 GROUP BY w.order_no;

結果是這樣的:d3

能夠看到,這個訂單原本是有3個異常,可是如今只能顯示出來1個。因此咱們須要進行完善。數據

既然關聯一次異常表,加where後能夠過濾掉數據,那麼咱們再關聯一次,將符合條件的訂單再一次關聯不帶where條件便可。查詢

代碼以下:異常

SELECT w.order_no,GROUP_CONCAT(cda.label) AS abnormal_status
    FROM common_dict cd RIGHT JOIN work_order w ON 1 =1 AND cd.type = 'abnormal_status' AND INSTR(w.abnormal_status,cd.`value`)> 0 
                 RIGHT JOIN common_dict cda ON 1 = 1 AND cda.type = 'abnormal_status' AND  INSTR(w.abnormal_status,cda.`value`)> 0 
   WHERE cd.label in('運輸超時')
 GROUP BY w.order_no;
-- group_concat裏用的異常表和條件裏的必定不能是同一個

結果以下:

這樣結果纔是咱們想要的結果,؏؏☝ᖗ乛◡乛ᖘ☝؏؏

相關文章
相關標籤/搜索