2016-04-27 13 views
1
SELECT t1.X, 
     t1.Item_Code, 
     t2.X, 
     t2.Item_Code 
FROM (SELECT Sum(e.item_qty) AS X, 
       A.Item_Code 
     FROM [Item Master]A 
       INNER JOIN [Counter Issue Details] e 
         ON e.Item_Code = A.Item_Code 
       INNER JOIN [Counter Master] CM 
         ON CM.Counter_Code = e.Counter_Code 
     WHERE e.Item_Code = A.Item_Code 
       AND A.Type_Code = 0 
     GROUP BY A.Item_Code)t1, 
     (SELECT Sum(e.item_qty) AS X, 
       A.Item_Code 
     FROM [Item Master]A 
       INNER JOIN [Counter Return Details] e 
         ON e.Item_Code = A.Item_Code 
       INNER JOIN [Counter Master] CM 
         ON CM.Counter_Code = e.Counter_Code 
     WHERE e.Item_Code = A.Item_Code 
       AND A.Type_Code = 0 
     GROUP BY A.Item_Code)t2 

Iam bekommen die OUTPTGibt es einen besseren Weg, um diese Auswahlabfrage

X          Item_Code        Y          Item_Code 
--------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- 
3998.000        1          2.00         11 
2000.000        2          2.00         11 
2000.000        3          2.00         11 
2504.000        4          2.00         11 
2384.000        5          2.00         11 
2456.000        6          2.00         11 
2372.000        7          2.00         11 
4900.000        9          2.00         11 
2000.000        10          2.00         11 
3948.000        11          2.00         11 

jetzt für Artikelnummer 11 als 2 für alle 10 Datensätze erhalte ich doppelte Datensätze hat zu schreiben. Ich möchte, dass der Y-Wert auf den Artikelcode 11 selbst abgebildet wird und alle anderen Null sein sollten

+0

Bitte verwenden Sie verbinden zwischen T1 und T2 –

+0

Was versuchen Sie zu erreichen? Ich könnte vorschlagen, dass Sie * eine andere * Frage stellen (diese hat bereits Antworten) und erklären Sie, was Sie tun, indem Sie Beispieldaten und gewünschte Ergebnisse bereitstellen. –

Antwort

5

Ihr Problem ist, dass alte Art kartesischen Join, der als ein CROSS JOIN fungiert. Wenn Sie einen richtigen Beitritt in Erwägung ziehen, werden Sie Ihre Daten nicht verdoppeln;

SELECT t1.Item_Code 
    ,t1.X t1_x 
    ,ISNULL(t2.X,0) t2_x 
FROM (
    SELECT SUM(e.item_qty) AS X 
     ,A.Item_Code 
    FROM [Item Master] A 
    INNER JOIN [Counter Issue Details] e ON e.Item_Code = A.Item_Code 
    INNER JOIN [Counter Master] CM ON CM.Counter_Code = e.Counter_Code 
    WHERE e.Item_Code = A.Item_Code 
     AND A.Type_Code = 0 
    GROUP BY A.Item_Code 
    ) t1 

LEFT JOIN 
    (
     SELECT SUM(e.item_qty) AS X 
      ,A.Item_Code 
     FROM [Item Master] A 
     INNER JOIN [Counter Return Details] e ON e.Item_Code = A.Item_Code 
     INNER JOIN [Counter Master] CM ON CM.Counter_Code = e.Counter_Code 
     WHERE e.Item_Code = A.Item_Code 
      AND A.Type_Code = 0 
     GROUP BY A.Item_Code 
     ) t2 
ON t1.Item_Code = t2.Item_Code 

Dies wird alle Werte von t1 zurückgeben, und übereinstimmende Informationen von t2. Edit: t2.X zeigt jetzt 0 ohne Daten anstelle von NULL an, wie angefordert.

Es gibt einige großartige Ressourcen zu diesem Thema;

Which join syntax is better?

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx

+0

Vielen Dank HerrBenner es funktioniert perfekt.Sie ​​speicherten meinen Tag – Venkatvasan

+0

statt NULL zu zeigen, wenn es keine Daten gibt, die ich zeigen möchte. Wie bekomme ich das .. – Venkatvasan

+0

ändern Sie die Auswahl zu 'ISNULL (t2.X, 0) t2_x '. Ich habe meinen ursprünglichen Code bearbeitet, um Ihnen das Beispiel zu zeigen. –

3

Sie haben nicht zwischen der abgeleiteten Tabellen T1 und T2 angegeben JOIN bekommen. Sie müssen einen LINKEN JOIN verwenden, wenn Sie Ergebnisse von t1, aber nicht von t2 für jede Zeile erwarten.

SELECT t1.X 
     , t1.Item_Code 
     , t2.X 
     , t2.Item_Code 
FROM (SELECT SUM(e.item_qty) AS X 
        , A.Item_Code 
      FROM  [Item Master] A 
        INNER JOIN [Counter Issue Details] e ON e.Item_Code = A.Item_Code 
        INNER JOIN [Counter Master] CM ON CM.Counter_Code = e.Counter_Code 
      WHERE  e.Item_Code = A.Item_Code 
        AND A.Type_Code = 0 
      GROUP BY A.Item_Code 
     ) t1 
     LEFT JOIN (SELECT SUM(e.item_qty) AS X 
          , A.Item_Code 
        FROM [Item Master] A 
          INNER JOIN [Counter Return Details] e ON e.Item_Code = A.Item_Code 
          INNER JOIN [Counter Master] CM ON CM.Counter_Code = e.Counter_Code 
        WHERE e.Item_Code = A.Item_Code 
          AND A.Type_Code = 0 
        GROUP BY A.Item_Code 
       ) t2 ON t1.Item_Code = t2.Item_Code; 
Verwandte Themen