2016-07-07 17 views
0

私は本当に以下のSQLに苦労しています。私は非常に多くの異なることを試みました、そして、私はそれらのどれも働かせることができません。私は基本的に行うために必要なもの左結合、Where句、およびSum()を使用したSQL文?

はLEFT OUTERが、この作業SQL文のJOINです:で

SELECT "TABLE1"."Sheet Number", 
     "TABLE1"."ID Number", 
     "TABLE1"."Identification", 
     "TABLE1"."Job Date", 
     "TABLE1"."p2c", 
     "TABLE2"."Range", 
     "TABLE1"."bcr", 
     "TABLE1"."Dataset ID", 
     "TABLE1"."ACC", 
     "TABLE1"."GNC", 
     "TABLE1"."Year", 
     "TABLE1"."Period", 
     "TABLE1"."Week", 
     "TABLE1"."Job_ID" 
FROM  "DATABASE"."dbo"."TABLE2" "TABLE2" LEFT OUTER JOIN "DATABASE"."dbo"."TABLE1" "TABLE1" 
     ON (((("TABLE2"."Contract"="TABLE1"."GNC") 
     AND ("TABLE2"."FromPeriod"="TABLE1"."Period")) 
     AND ("TABLE2"."FromWeek"="TABLE1"."Week")) 
     AND ("TABLE2"."FromYear"="TABLE1"."Year")) 
WHERE "TABLE1"."ACC"='ACCOUNT57' 
     AND "TABLE1"."Dataset ID"=5 
     AND "TABLE1"."bcr"=1 
     AND "TABLE2"."Range"='Week' 
ORDER BY "TABLE1"."Sheet Number" 

をこの1:

SELECT "SALES"."JobId", 
     "SALES"."Total", 
     SUM("SALES"."Total") AS JOBTOTAL 
FROM "DATABASE"."dbo"."SALES" "SALES" 
GROUP BY "SALES"."JobId" 
ON "SALES"."JobId"="TABLE1"."Job_ID" 

しかし、他の私に大きな混乱を引き起こしているジョイン/私がオンラインで見つけた解決策を実装しようとしたときの不満。私はWHEREとGROUP BY文がうまくいきませんでしたか?

しかし、私はオンラインで仕事が見つかるとは思えません。私が試した1つの解決策は、ちょうどSUM()とGROUP BY(私の下のステートメント)を含むSQLステートメントを大括弧で囲み、

誰も助けてくれますか?

お時間をいただきありがとうございます。

+0

最も簡単には、実際に派生表にSUMの選択をラップされた後、左がそれに参加。そして、最初のクエリの結果が期待どおりであるかどうかを確認します。これは、Leftの代わりにInner joinです。 – dnoeth

+0

テーブル2のカラムを使用していない場合は、テーブル2の結果をテーブル1に限定しようとしていますか? – Matt

+0

はいテーブル2は、テーブル1の結果を制限するためにのみ使用されます。内部結合tbhが必要ですが、これを動作させようとするのが面倒で、何かを変更し始めました。また、それは実装しようとした派生テーブルでしたが、私はちょうどそれを働かせることができませんでした... – Dark

答えて

1
SELECT 
    t1.Sheet Number, 
    t1.ID Number, 
    t1.Identification, 
    t1."Job Date", 
    t1.p2c, 
    t1."Range", 
    t1.bcr, 
    t1.Dataset ID, 
    t1.ACC, 
    t1.GNC, 
    t1."Year", 
    t1.Period, 
    t1."Week", 
    t1.Job_ID, 
    SUM(s.Total) AS JOBTOTAL 
FROM  
    dbo.TABLE1 t1 
    LEFT JOIN dbo.Sales s 
     ON t.Job_Id = s.Job_id 
WHERE 
    t1.ACC='ACCOUNT57' 
    AND t1.Dataset ID=5 
    AND t1.bcr=1 
    AND EXISTS (SELECT * 
      FROM 
       dbo.TABLE2 t2 
      WHERE 
       t1.GNC = t2.Contract 
       AND t1.Period = t2.FromPeriod 
       AND t1."Week" = t2.FromWeek 
       AND t1."Year" = t2.FromYear 
       AND t2."Range"='Week') 
GROUP BY 
    t1.Sheet Number, 
    t1.ID Number, 
    t1.Identification, 
    t1."Job Date", 
    t1.p2c, 
    t1."Range", 
    t1.bcr, 
    t1.Dataset ID, 
    t1.ACC, 
    t1.GNC, 
    t1."Year", 
    t1.Period, 
    t1."Week", 
    t1.Job_ID 
ORDER BY 
    t1.Sheet Number 

ます。また、このようにそれを行うことができます。

SELECT DISTINCT 
    t1.Sheet Number, 
    t1.ID Number, 
    t1.Identification, 
    t1."Job Date", 
    t1.p2c, 
    t1."Range", 
    t1.bcr, 
    t1.Dataset ID, 
    t1.ACC, 
    t1.GNC, 
    t1."Year", 
    t1.Period, 
    t1."Week", 
    t1.Job_ID, 
    s.JOBTOTAL 
FROM  
    dbo.TABLE1 t1 

    INNER JOIN dbo.TABLE2 t2 
    ON t1.GNC = t2.Contract 
    AND t1.Period = t2.FromPeriod 
    AND t1."Week" = t2.FromWeek 
    AND t1."Year" = t2.FromYear 
    AND t2."Range"='Week' 

    LEFT JOIN (SELECT 
       SUM(s.Total) AS JOBTOTAL 
      FROM 
       dbo.Sales s 
      WHERE 
       t.Job_Id = s.Job_id) s 
WHERE 
    t1.ACC='ACCOUNT57' 
    AND t1.Dataset ID=5 
    AND t1.bcr=1 
ORDER BY 
    t1.Sheet Number 
+0

ありがとうございます - 私は現在、JOBTOTALの合計が4つの値を戻しているという問題しかありません。 2は2倍の正しい量です。例: job1 =£10 job1 =£20 job1 =£20 job1 =£10 – Dark

+0

テーブル2はおそらく、テーブル1の結合で2つ以上の行が返されている可能性があります。私はそれを取るテーブル1は、テーブル2に多くの関係に1つですか? – Matt

+0

はい、私はJOBTOTALフィールドでこれらのすべてを合計することを望んでいたそれぞれの荷役可能なアイテムの行を戻します - それは、私はSQLの外でそれをグループ化し、または各ジョブの正しい金額を2倍にします。ご協力いただきありがとうございます! – Dark

関連する問題