2016-03-27 16 views
1

スキーマ: enter image description hereインナーは、重複排除の参加

問合せ:

SELECT avto.Marka,SUM(OtrabotanoMachine_hours) as 'work hours',SUM(sec.Hours) as Downtime,CONVERT(group_concat(concat(prostoy.Prichina,'=',sec.Hours) separator ';') USING 'utf8') as 'downtime reasons',CONVERT(group_concat(concat(VipolnennayaRabota,'=',V_raboty) separator ';') USING 'utf8') as 'performed works' 
FROM 
jos_addRabotyAndProstoyMain main 
INNER JOIN avto ON main.Marka=avto.ID_Avto 
INNER JOIN (
    SELECT id_fk, SUM(Hours) AS Hours, Prostoy 
    FROM jos_addRabotyAndProstoySecond 
    GROUP BY id_fk,Prostoy) sec ON sec.id_fk = main.id 
INNER JOIN prostoy ON sec.Prostoy = prostoy.ID_Prosyoy 
GROUP BY avto.Marka 

間違った結果:

| Marka | work hours |downtime| downtime reasons  | performed works| 
|JCB-90QX |  44  | 7 |lack of materials=2; | work=51;  | 
|   |    |  |machine malfunction=1; | work=51;  |    
|   |    |  |Others=3;    | work=51;  | 
|   |    |  |unscheduled repairs=1 | work=51;  | 

列 "労働時間" と重複が含まれている "作品を実施し"。どのように重複を排除する?

私はこのような結果必要

| Marka | work hours |downtime| downtime reasons  | performed works| 
|JCB-90QX |  11  | 7 |lack of materials=2; | work=51;  | 
|   |    |  |machine malfunction=1; |    |    
|   |    |  |Others=3;    |    | 
|   |    |  |unscheduled repairs=1 |    | 

更新SQL Fiddle

+0

重複はテーブル 'jos_addRabotyAndProstoyMain'に作成されますが、重複を排除する方法はわかりません。 – Vitaly

+1

使用できるテストデータがありますか? create tableステートメントも必要です。あなたの質問にそれらを追加すると助けになるでしょうか? [SQLFiddle](http://sqlfiddle.com)に置くことはいいと思います。 –

+1

追加してください。 – Vitaly

答えて

1

私は解決策は、あなたが独自のデータを使用したい列にDISTINCT句を追加することだと思います。

(あなたのSQLフィドルから取られた)、これを試してみてください:

SELECT avto.Marka,SUM(distinct OtrabotanoMachine_hours) as 'work hours',SUM(sec.Hours) as Downtime,CONVERT(group_concat(concat(prostoy.Prichina,'=',sec.Hours) separator ';') USING 'utf8') as 'downtime reasons',CONVERT(group_concat(distinct concat(VipolnennayaRabota,'=',V_raboty) separator ';') USING 'utf8') as 'performed works' 
FROM 
jos_addRabotyAndProstoyMain main 
INNER JOIN avto ON main.Marka=avto.ID_Avto 
INNER JOIN (
    SELECT id_fk, SUM(Hours) AS Hours, Prostoy 
    FROM jos_addRabotyAndProstoySecond 
    GROUP BY id_fk,Prostoy) sec ON sec.id_fk = main.id 
INNER JOIN prostoy ON sec.Prostoy = prostoy.ID_Prosyoy 
GROUP BY avto.Marka 

しかし、私がOtrabotanoMachine_hoursの設定方法は100%を確認していないことに注意することが重要です。同じ値を持つ2つの正当な別個のエントリが存在する可能性がある場合、それらは重複排除されます。

+0

編集済みのSQL Fiddle(行を追加)。 'OtrabotanoMachine_hours'の値を繰り返すことができます。このクエリでは、 'SUM(distinct OtrabotanoMachine_hours)'は解決策ではありません:( – Vitaly

関連する問題