2016-12-22 49 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>