2016-12-22 4 views
0

私はいくつかの繰り返しレコードを持つmysqlテーブルを持っていて、カラムはError_codeでした。すべてのデータが正しい場合、okはすべての列に対して挿入されます。いくつかのデータが間違っていると、間違ったデータレコードにエラーが挿入されます。エラーがなければ、関連する列にokが表示されます。Mysqlによるグループを使用して希望の結果を表示

しかし、エラーがある場合は、グループを使用してエラーを表示します。どのように私はそれのためのクエリを書くことができますか?

voucherid error_code 
123456  ok 

しかし、私はエラーコードがある場合:私はこのクエリは、このデータを返します

select voucherid, error_code 
from voucher_info 
group by voucher id 

でグループを使用してクエリの下に使用しています

サンプルテーブル

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

表のデータは以下のようになります

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

エラーerror_codeの値を以下のようにErrorとして表示します。

voucherid error_code 
123456  Error 

どのようにグループを使用して行うのですか?どんな助けでも大歓迎です。

+0

は、あなたが「エラー」のコードとデータのみを取得しますかよくない? –

答えて

0

2つのテーブルがあるか1つのみかわかりません。あなたは一つのテーブルを持っていると はこのようにあなたがそれを行うことができますが、エラー場合にのみ見たい場合:

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> 
関連する問題