2017-11-27 2 views
0

ich zwei Tabellen zu verknüpfen bin versucht, aber haben zum Erfolg nicht in der LageMS SQL Server - Join zwei Tabellen, in denen ID neue ID entspricht

Test Supplier Table 

SID  NAME  
1  Test 
2  Test2 


Test Stock Table 

    ID  NewID SupID Qty 
    1  101  1  2 
    2  102  1  5 
    3  103  2  6 
    101    1  4 
    101    1  7 
    101    2  5 
    103    2  10 

Der Ausgang ich suche

ID  NAME Qty 
    2  Test 5 
    101  Test 13 
    101  Test2 5 
    103  Test2 16 

Mein Code ist -

Select S.NAME, ST.ID, SUM(ST.Qty) 
From Stock ST 
Inner Join ST.SupID = S.SID 

Ich muss diejenigen IDs kombinieren, die mit den neuen IDs mit einer anderen IDs übereinstimmen. Wenn Sie die Ergebnisse sehen, muss ich ID 1 Menge mit ID 101 kombinieren, weil ID 1 hat neue ID 101 und keine Notwendigkeit, ID 1 anzuzeigen. Ich habe versucht, inner beizutreten, hat aber nicht funktioniert.

+0

Sie können hier beginnen: https://www.w3schools.com/sql/sql_join_inner.asp – Alex

+0

@ Alex, ich habe versucht, innere Verknüpfung, aber hat nicht funktioniert – Arif

+1

uns Zeigen Sie, was Sie versucht haben. – Alex

Antwort

2

Zuerst finden Sie diejenigen mit NEUER ID und solche ohne NEUE ID. Verwenden Sie für Benutzer mit NewID NEWID für Benutzer ohne ID (alte ID). Dann verwenden Sie UNION ALL, um sowohl das Ergebnis als auch den Join zur Tabelle Lieferant zu kombinieren, um den NAMEN zu erhalten.

; with 
cte as 
(
    -- with NewID 
    select ID = NewID, SupID, Qty = sum(Qty) 
    from Stock ST 
    where exists 
      (
       select * 
       from Stock x 
       where x.ID = ST.NewID 
      ) 
    group by NewID, SupID 

    union all 

    -- without NewID 
    select ID, SupID, Qty = sum(Qty) 
    from Stock ST 
    where not exists 
      (
       select * 
       from Stock x 
       where x.ID = ST.NewID 
      ) 
    group by ID, SupID 
) 
select c.ID, SP.NAME, Qty = sum(Qty) 
from cte c 
     inner join Supplier SP on c.SupID  = SP.SID 
group by c.ID, SP.NAME 
+0

es funktioniert, vergessen Sie den Tischnamen – Arif

+0

verwenden Sie Ihre tatsächliche Tabelle und Spalte Name – Squirrel

+0

Vielen Dank für Ihre Hilfe, ich habe Ihre Antwort akzeptieren – Arif

0

Beginnen Sie mit der Auf-Tabelle und kommen an den Lieferanten-Tabelle (die Erinnerung an die Tabelle zu nennen in der Join) und dann sich selbst überlassen den IDs der Bestandstabelle kommen, um zu bestimmen, ob sie vorhanden sind oder nicht. Dann gruppieren Sie nach der gewünschten ID, die Sie behalten möchten.

SELECT 
    COALESCE(ST2.ID, ST.ID) ID 
, S.NAME NAME 
, SUM(ST.Qty) Qty 
FROM Stock ST 
INNER JOIN Supplier S 
    ON ST.SupID = S.SID 
LEFT JOIN (
    SELECT DISTINCT ID 
    FROM Stock 
) ST2 
    ON ST.NewID = ST2.ID 
GROUP BY 
    COALESCE(ST2.ID, ST.ID) 
, S.NAME 
+0

Vielen Dank für Ihre Hilfe, ich habe die andere Lösung, die ich besser ist für mich – Arif

Verwandte Themen