1

私はいくつかのテーブルから選択しています:

 SELECT  SUM(S2.F64)   as sumAll
 FROM someTABLE1 S1
 LEFT OUTER JOIN someTABLE2 S2 ON S2.F32 = S1.F32 
 WHERE S2.F01 = '1006'
 and S2.F68='ORDER' AND S1.F67='ITEM'

今、別の選択から S1.F01 の値を取得したい: このようなもの

SELECT S3.F01
FROM someTABLE3 S3
WHERE "something..."

だから私はこのようなものが欲しい:

SELECT  SUM(S1.F64) as sumAll, S3.F01  
FROM someTABLE3 S3
LEFT OUTER JOIN someTABLE1 S1 ON S1.F01 = S3.F01
LEFT OUTER JOIN someTABLE2 AS S2 ON S1.F32 = S2.F32 
WHERE S1.F01 = S3_F01
and S2.F1068='ORDER' AND S1.F1067='ITEM'

ただし、S3 のすべてのアイテムを取得し、条件が一致する sumAll の列を埋めるだけです。

だから私はこのようなものが欲しい(疑似コード):

SELECT * from S3
FOR EVERY (S3.F01)
{
    SELECT * FROM S1
    if(S1.F1067='ITEM')
        RETURN S3 AND SUM(S1.F64)
    ELSE 
        RETURN S3
}

とにかくそれをすることはありますか?

4

2 に答える 2

1

探しているだけGROUP BYですか?

SELECT  SUM(S1.F64) as sumAll, S3.F01  
FROM someTABLE3 S3
    LEFT OUTER JOIN someTABLE1 S1 ON S1.F01 = S3.F01
    LEFT OUTER JOIN someTABLE2 AS S2 ON S1.F32 = S2.F32 
WHERE S2.F1068='ORDER' AND S1.F1067='ITEM'
GROUP BY S3.F01

編集 - where 基準を結合に移動します...

SELECT  SUM(S1.F64) as sumAll, S3.F01  
FROM someTABLE3 S3
    LEFT OUTER JOIN someTABLE1 S1 ON S1.F01 = S3.F01 AND S1.F1067='ITEM'
    LEFT OUTER JOIN someTABLE2 AS S2 ON S1.F32 = S2.F32 AND S2.F1068='ORDER'
GROUP BY S3.F01

SQL フィドル

于 2013-11-15T00:05:10.260 に答える
0

私があなたを完全に理解しているかどうかは絶対にわかりませんが、それを行うためのアプローチは次のとおりです。

SELECT  S3.*, SQ.sumValue
FROM someTABLE3 S3
LEFT JOIN( SELECT F01,SUM(F64)
          FROM someTable1
          WHERE F1067='ITEM'
          GROUP BY F01) SQ ON SQ.F01 = S3.F01
LEFT JOIN someTable1 AS S1 ON S1.F01 = S3.F01
LEFT JOIN someTABLE2 AS S2 ON S1.F32 = S2.F32  AND S2.F1068='ORDER'

SUM(F64) GROUP BY F01onを取得する内部クエリを実行しますtable1。このように、LEFT JOINfrom table3to that を実行すると、すべてのtable3and K または必要なが得られSUMます。

次にLEFT JOINwithについてはtable2、あなたが に共感できるかどうかわからないので、最初にLEFT JOINwith を行います。table1table2table3

これは少し混乱しますが、アプローチを理解していただければ幸いです

于 2013-11-15T00:38:20.373 に答える