1

ここに画像の説明を入力してくださいここに画像の説明を入力してください2つのテーブルを結合しているときに、1つのクエリを実行しましたが、2番目のテーブルのデータが正しく表示されず、代わりにガベージ値が表示されています。

私が使用したクエリは、

select p.machinenumber,
max(case when (p.shift)=1 then xxxx end) s1_xxxx,
max(case when (p.shift)=2 then xxxx end) s2_xxxx,
avg(case when (p.shift)=1 then yyyy end) s1_yyyy ,
avg(case when (p.shift)=2 then yyyy end) s2_yyyy 
from pdata p
inner  join (select  count(case when (shift)=1 and (ename)=1  then ename end) s1_wa,
count(case when (shift)=1 and (ename)=2 then errorname end) s1_we,
count(case when (shift)=2 and (ename)=1 then errorname end) s2_wa,
count(case when (shift)=2 and (ename)=2 then ename end) s2_we,
count(case when (shift)=1 and (ename)=0 then ename end) s1_merror,
count(case when (shift)=2 and (ename)=0 then ename end) s2_merror  from mstop)m
on p.mnumber=m.mnumber
where date(p.proddate)='2013-02-25'; 

この問題を解決してください??

4

3 に答える 3

2

mnumberのために戻る必要もありますm.mnumber。mstop テーブルの内部結合ではmnumber、 に従って結合するために戻る必要もありますmnumber

inner  join (select  count(case when (shift)=1 and (ename)=1  then ename end) s1_wa,
count(case when (shift)=1 and (ename)=2 then errorname end) s1_we,
count(case when (shift)=2 and (ename)=1 then errorname end) s2_wa,
count(case when (shift)=2 and (ename)=2 then ename end) s2_we,
count(case when (shift)=1 and (ename)=0 then ename end) s1_merror,
count(case when (shift)=2 and (ename)=0 then ename end) s2_merror,
     mnumber  from mstop)m
on p.mnumber=m.mnumber
于 2013-03-01T06:41:43.110 に答える
1

サブクエリに列を投影していないためです。結合で表示されるようにするには、サブクエリ内の列名mnumberが必要です。クエリに句SELECTを追加することを忘れないでください。GROUP BY

select  p.machinenumber,
        max(case when (p.shift)=1 then xxxx end) s1_xxxx,
        max(case when (p.shift)=2 then xxxx end) s2_xxxx,
        avg(case when (p.shift)=1 then yyyy end) s1_yyyy ,
        avg(case when (p.shift)=2 then yyyy end) s2_yyyy 
from    pdata p
        inner  join 
        (
            select  mnumber,
                    count(case when (shift)=1 and (ename)=1  then ename end) s1_wa,
                    count(case when (shift)=1 and (ename)=2 then errorname end) s1_we,
                    count(case when (shift)=2 and (ename)=1 then errorname end) s2_wa,
                    count(case when (shift)=2 and (ename)=2 then ename end) s2_we,
                    count(case when (shift)=1 and (ename)=0 then ename end) s1_merror,
                    count(case when (shift)=2 and (ename)=0 then ename end) s2_merror  
            from    mstop
            GROUP   BY mnumber
        ) m on p.mnumber=m.mnumber
where   date(p.proddate)='2013-02-25'
GROUP   BY  p.machinenumber
于 2013-03-01T06:42:14.040 に答える
0

ガベージが 2 番目のテーブルから来ている場合は、LEFT JOIN代わりに試してくださいINNER JOIN

于 2013-03-01T06:41:40.987 に答える