2016-08-10 4 views
0

私は自分の列のプロパティの1つに合計を持っている。しかし残りは私がグループに入れなければならない。しかしこれは正しいのですか?それとも他の方法でやってもいいですか?SQLで合計を書くがGROUP内の他の列By

私はこれがあります。

SELECT 
    SU.[Vendor No_] as LeveranciersNR, V.Name as LeveranciersName, 
    SU.[Item No_], SU.[Reorder Cycle] as bestelfrequentie, 
    SU.[Location Code], SU.[Reordering Policy], 
    I.Description as procuctOmschrijving, 
    SUM(VLE.[Purchase (LCY)]) as Inkoopomzet 
FROM 
    [Verploegen POC$Vendor] V 
JOIN 
    [Verploegen POC$Vendor Ledger Entry] VLE ON VLE.[Vendor No_] = V.No_ 
JOIN 
    [Verploegen POC$Stockkeeping Unit] SU ON V.No_ = SU.[Vendor No_] 
JOIN 
    [Verploegen POC$Item] I ON I.No_ = SU.[Item No_] 
WHERE 
    SU.[Reordering Policy] = 2 
    AND VLE.[Posting Date] BETWEEN '2016-01-01' AND '2016-12-31' 
GROUP BY 
    VLE.[Vendor No_], SU.[Vendor No_], V.Name, SU.[Item No_], 
    SU.[Reorder Cycle], SU.[Location Code], SU.[Reordering Policy], 
    I.Description 
ORDER BY 
    SU.[Location Code] 

はあなたに

をありがとうしかし、私は出力としてこれを取得する:ここで

3008 Gebo Armaturen GmbH 110563 2M AM 2 KOPP.BINDR.X FLEX 2 X 63,5 MM -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 110565 2M AM 2 KOPP.BINDR.X FLEX 5/4 X 44 MM -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 110567 2M AM 2 KOPP.BINDR.X FLEX 6/4 X 51 MM -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 110569 2M AM 2 KOPP.BINDR.X FLEX 2 X 57 MM -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75432 2M AM 2 gebo 046206015 rep.kopp. 15 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75433 2M AM 2 gebo 046206022 rep.kopp. 22 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75434 2M AM 2 gebo 046206028 rep.kopp. 28 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75435 2M AM 2 gebo 046206035 rep.kopp. 35 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75442 2M AM 2 gebo 012522801 rep.kopp 1/2 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75443 2M AM 2 gebo 012522802 rep.kopp 3/4 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75445 2M AM 2 gebo 012522803 rep.kopp 1" -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75449 2M AM 2 gebo 012522804 rep.kopp 5/4 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75450 2M AM 2 gebo 012522805 rep.kopp 1 1/2 -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75451 2M AM 2 gebo 012522806 rep.kopp 2" -1141.70000000000000000000 
3008 Gebo Armaturen GmbH 75452 2M AM 2 gebo 012522807 rep.kopp 2 1/2 -1141.70000000000000000000 
3047 Tasseron Sensors bv 906701 2M AM 2 vaillant 287606 ntc voeler pl -881.00000000000000000000 
3047 Tasseron Sensors bv 906703 2M AM 2 vaillant 287607 ntc voeler aa -881.00000000000000000000 
3047 Tasseron Sensors bv 913194 2M AM 2 bosch 87229333160 ntc m6 r -881.00000000000000000000 
+1

私にはうまく見えますか、試してみましたか? – Lamak

+0

これはmysqlのようには見えません。 – Strawberry

+0

?私はMSSQLを使用しています2014 –

答えて

0

内部結合を行っているので、where句の条件をそれぞれの結合に移動しないでください。結合が小さい結果セットを作成するので、より速く実行する必要があります。

SELECT 
    SU.[Vendor No_] as LeveranciersNR, V.Name as LeveranciersName, 
    SU.[Item No_], SU.[Reorder Cycle] as bestelfrequentie, 
    SU.[Location Code], SU.[Reordering Policy], 
    I.Description as procuctOmschrijving, 
    SUM(VLE.[Purchase (LCY)]) as Inkoopomzet 
FROM 
    [Verploegen POC$Vendor] V 
JOIN 
    [Verploegen POC$Vendor Ledger Entry] VLE ON VLE.[Vendor No_] = V.No_ 
    AND VLE.[Posting Date] BETWEEN '2016-01-01' AND '2016-12-31' 
JOIN 
    [Verploegen POC$Stockkeeping Unit] SU ON V.No_ = SU.[Vendor No_] 
    AND SU.[Reordering Policy] = 2 
JOIN 
    [Verploegen POC$Item] I ON I.No_ = SU.[Item No_] 
GROUP BY 
    VLE.[Vendor No_], SU.[Vendor No_], V.Name, SU.[Item No_], 
    SU.[Reorder Cycle], SU.[Location Code], SU.[Reordering Policy], 
    I.Description 
ORDER BY 
    SU.[Location Code] 
+0

あなたのソリューションをありがとう –

+0

@Niels Kingどのような計画の違いに気づいた? –

+0

結果は異なりますが、同じ結果が返されます。同じ結果が得られます。 –

0

が少ないグループとスクリプトですが、それは同じことを返すことを想定しその結果、より速く動作するという事実はありません。

;WITH VLE as (
    SELECT SUM([Purchase (LCY)]) as Inkoopomzet, [Vendor No_] 
    FROM [Verploegen POC$Vendor Ledger Entry] 
    WHERE [Posting Date] BETWEEN '2016-01-01' AND '2016-12-31' 
    GROUP BY [Vendor No_] 
) 
SELECT 
    SU.[Vendor No_] as LeveranciersNR, V.Name as LeveranciersName, 
    SU.[Item No_], SU.[Reorder Cycle] as bestelfrequentie, 
    SU.[Location Code], SU.[Reordering Policy], 
    I.Description as procuctOmschrijving, 
    VLE.Inkoopomzet 
FROM [Verploegen POC$Vendor] AS V 
INNER JOIN VLE ON VLE.[Vendor No_] = V.No_ 
INNER JOIN [Verploegen POC$Stockkeeping Unit] SU ON V.No_ = SU.[Vendor No_] 
INNER JOIN [Verploegen POC$Item] I ON I.No_ = SU.[Item No_] 
WHERE SU.[Reordering Policy] = 2 
ORDER BY SU.[Location Code]; 
+0

お返事ありがとうございます。 –