2016-12-22 84 views
0

我有一個mysql表,有一些重複的記錄,有一列Error_code。因爲如果所有數據都是正確的,那麼確定將插入所有列。如果某些數據有誤,則會爲這些錯誤的數據記錄插入錯誤。如果沒有錯誤,ok將顯示在相關列中。通過使用Group by Mysql顯示所需的結果

但是,如果錯誤存在,那麼我想通過使用group by來顯示錯誤。我該如何編寫查詢?

樣品表

voucherid ean error_code 
123456 234 OK 
123456 435 OK 
123456 345 Ok 

我使用下面的查詢使用GROUP BY

select voucherid, error_code 
from voucher_info 
group by voucher id 

這個查詢將返回此數據:

voucherid error_code 
123456  ok 

但是,如果我有錯誤代碼表格的數據如下

voucherid ean error_code 
123456 234 OK 
123456 435 Error 
123456 345 Ok 

現在我想顯示error_code的值如下所示的錯誤。

voucherid error_code 
123456  Error 

如何使用group by?任何幫助將不勝感激。

+0

你想只獲取與「錯誤」的代碼數據不好? –

回答

0

我不確定你是否有2張桌子或只有一張桌子。如果你有一個表, 只是想看看是否有一個錯誤,你可以做這樣的:

SELECT 
    vi.voucherid 
    , GROUP_CONCAT(ean) eans 
    , IF(COUNT(*) - SUM(IF(error_code = 'ERROR' OR @err = 'ERROR' , 0 , 1)) = 0 , 'OK', 'ERROR') error_code 
FROM voucher_info vi 
CROSS JOIN (SELECT @err:='') AS initial 
GROUP BY voucherid; 

樣品

mysql> select * from voucher_info; 
+-----------+------+------------+ 
| voucherid | ean | error_code | 
+-----------+------+------------+ 
| 123456 | 234 | OK   | 
| 123456 | 435 | OK   | 
| 123456 | 345 | OK   | 
| 123457 | 234 | OK   | 
| 123457 | 435 | ERROR  | 
| 123457 | 345 | OK   | 
+-----------+------+------------+ 
6 rows in set (0,00 sec) 

mysql> SELECT 
    ->  vi.voucherid 
    ->  , GROUP_CONCAT(ean) eans 
    ->  , IF(COUNT(*) - SUM(IF(error_code = 'ERROR' OR @err = 'ERROR' , 0 , 1)) = 0 , 'OK', 'ERROR') error_code 
    -> FROM voucher_info vi 
    -> CROSS JOIN (SELECT @err:='') AS initial 
    -> GROUP BY voucherid; 
+-----------+-------------+------------+ 
| voucherid | eans  | error_code | 
+-----------+-------------+------------+ 
| 123456 | 234,435,345 | OK   | 
| 123457 | 234,435,345 | ERROR  | 
+-----------+-------------+------------+ 
2 rows in set (0,01 sec) 

mysql>