2016-09-07 3 views
0

Tabelle 1:Sql Gruppe mit sehr großen kommen alternative

Itemid saleid 
--------------- 
53355 23224 
33544 33246 
53355 33353 
43324 33353 

Tabelle 2:

Saleid Rebate 
-------------- 
23224 3000 
33246 5000 
33353 5555 
33353 4444 

dies ein vereinfachtes Tabelle. Das Problem, das ich habe, ist, dass ich zuerst nach dem itemid gruppieren und dann table2 salleid beitreten möchte. Wenn ich die Gruppe durch salesid selbst mache, gibt sie 100.000 Datenzeilen zurück, was in Ordnung ist, aber wenn ich auch durch die salesid gruppiert werde, komme ich zu Millionen von Zeilen, was es für mich nicht praktikabel macht. Irgendwelche Ideen, wie ich das schaffen kann, damit ich diese Tische verbinden kann? Hier ist eine einfache Abfrage zum Beispiel

So denken Sie daran, die itemid I Gruppe viele Elemente hat können aber saleid ist nicht eindeutig, so dies durch

nach der Gruppe anschließen möchte, die mich zu Millionen von Zeilen bekommen. Wenn es sich nach der Gruppe anschließt, sollten noch 100.000 Datenzeilen vorhanden sein.

select 
    ta.itemid, ta.saleid, sa.itemid 
from 
    table1 ta 
inner join 
    saleid sa 
where 
    ta.saleitemid = sa.itemid 
group by 
    itemid, saleid 
+0

zeigen Sie die tatsächliche Abfrage, aber wahrscheinlich gibt es nichts, was Sie tun können. Sie bekommen genau das, wonach Sie gefragt haben. und beachte, dass du nicht "gruppierst dann beitrittst". Der Beitritt erfolgt FIRST, weil die Gruppierung erst nach Verfügbarkeit aller relevanten Zeilendaten bestimmt werden kann. –

+0

Ich habe oben eine einfache Abfrage zur Verfügung gestellt, wenn das hilft. – penfold255

+0

Kann eine Artikel-ID mit mehr als einer Verkaufs-ID gepaart werden? – kbball

Antwort

0

Sie können zuerst die Gruppe tun, wenn Sie eine Unterabfrage verwenden und kommen dann diese Abfrage Tabelle 2:

SELECT * 
FROM 
(SELECT itemid, saleid 
FROM Table_1 
GROUP BY itemid, saleid) sub 
INNER JOIN Table_2 
ON sub.saleid = Table_2.saleid 

Edit: die obige Abfrage arbeiten für Sie basiert nicht auf Ihre Kommentare, Also werde ich versuchen, eine Frage zu stellen, die uns zu dem führt, was Sie wirklich wollen.

Angenommen, dies ist Tabelle 1:

Itemid saleid 
20000 23224 
33544 33246 
53355 22523 
43324 33353 
43324 11111 
43324 22222 
43324 33333 
43324 44444 

Und das ist Tabelle 2:

Saleid Rebate 
23224 3000 
33246 5000 
22523 5555 
33353 4444 
11111 1111 
22222 2222 
33333 3333 
44444 4444 

Sagen Sie uns in den Kommentaren, was Ihre gewünschte Ausgabe aussieht.

Zusätzliche Update: dieses zeigt Summe (Rabatt) pro Artikel-ID:

SELECT itemid, SUM(rebate) 
FROM t1 INNER JOIN t2 
ON t1.saleid = t2.saleid 
GROUP BY itemid 
+0

Das Problem ist, dass in der ersten Tabelle die Gruppe funktioniert nicht richtig, wenn Sie salesid der Gruppe hinzufügen, weil mit der itemid normalerweise bis 100k Reihen gruppieren würde, aber wenn Sie die Gruppe erweitern, indem Sie salleid in der ersten Tabelle enthalten für mein Gesamtergebnis auf eine Million erweitert, was nicht das ist, was ich brauche. – penfold255

+0

So klingt es wie Itemid kann mit mehreren salesids gepaart werden. Versuchen Sie in diesem Fall, Ihre Ergebnismenge zu reduzieren, sodass nur eine SaleID mit jeder Artikel-ID gepaart ist? Wenn ja, möchten Sie zum Beispiel die Mindest- oder Höchstzahl auswählen? Welcher sollte aufgelistet werden? – kbball

+0

Nun, was ich versuche zu tun ist Gruppe von der ersten Tabelle von itemid, die Ergebnis auf 100k reduziert und dann für diese 100k haben salleids. Zur gleichen Zeit hat Tabelle 2 mehrere salesids, die gruppiert werden müssen. Es verbindet nur diese, um die es geht. – penfold255

0

Während Gruppierung erlauben können Sie die Anzahl der Datensätze durch eine Abfrage, wird es in der Regel für die Aggregation zurückgegeben zu reduzieren verwendet (count(), sum(), min(), max() etc.). Was auch immer der Group By-Klausel hinzugefügt wird, wirkt sich auf die Anzahl der zurückgegebenen Datensätze aus, wenn Sie die Gruppe spezifischer gestalten, wodurch die Möglichkeit verringert wird, Zeilen zusammenzufassen.

Es klingt, als ob Sie eine Eins-zu-viele-Beziehung zwischen Ihrer ItemId-Tabelle und Ihrer SalesId-Tabelle haben. Wenn Sie also aus der Item-Tabelle und -Gruppe einfach die ItemId auswählen, handelt es sich um eine allgemeinere Gruppierung, die die Anzahl der Datensätze auf nur diese eindeutigen ItemIds in der Tabelle reduziert. Wenn Sie die SalesId in Ihrer Gruppe einschließen, gruppieren Sie jetzt nur noch die eindeutigen Kombinationen von ItemId und SalesId, die zu mehr Datensätzen führen.

Es ist zu diesem Zeitpunkt egal, wenn Sie die SalesId-Tabelle in diese Abfrage einbinden oder nicht, erhalten Sie immer die Anzahl der eindeutigen ItemIds und SalesIds, solange beide in der Gruppe enthalten sind.

Vielleicht versuchen Sie, die Ergebnisse, die Sie versuchen zu erreichen, indem Sie einige genauere Angaben zu den Daten, die Sie abfragen, und wir können Ihnen helfen, schreiben eine leistungsfähigere Auswahl ...

+0

Das Ergebnis, das ich versuche zu erreichen, ist eine Reduktion der itemID zunächst als Ausgangspunkt, der 100k Zeilen hätte, die dann salesID angehängt hat (hat immer noch 100k Zeilen), was dann wäre Stellen Sie mir einen Link zu Tabelle2 zur Verfügung. In Tabelle 2 müsste ich die Saleids einzigartig machen und den Rabatt summieren. Dann fügen Sie das an Tabelle 1 an, also würden wir insgesamt 100k Zeilen mit itemid, salesid und sum (Rabatt) haben. Das ist, was ich versuche zu erreichen, ich brauche keine Gruppe zu verwenden, will nur irgendwie, um es funktionieren zu lassen, aber gruppieren durch in Tabelle1 für beide salleids und itemid gibt mir zu viele Ergebnisse, in die Millionen. – penfold255

+0

Ok, also wirklich die Aggregation, die Sie tun möchten, ist in der Verkaufstabelle, um die Rabattwerte zu summieren. Ist dies mit der Sales ID möglich? Wenn dies der Fall ist, sollten Sie Datensätze in dieser Tabelle nach Umsatz-ID gruppieren und diese mit Ihrer Abfrage eindeutiger ItemId/SalesId-Kombinationen verknüpfen. Wenn die Umsatz-ID die granularste Datenebene ist, die Sie zurückgeben möchten, beginnen Sie, indem Sie diese Daten mit dem summierten Rabatt zu den einzelnen Umsatz-IDs zusammenfassen. Wenn Sie dies den Item/Sales-Kombinationen hinzufügen, sollte die Anzahl der Datensätze nicht erhöht werden. –

+0

ja das ist richtig. Die Aggregation erfolgt in dieser Tabelle2. Aber irgendwie muss man es mit diesen 100k Zeilen von Tabelle 1 verbinden, sonst wird Tabelle1 zu groß. Ich brauche einen reduzierten Datensatz in Tabelle1 wichtig. Das Problem, das ich habe, ist Tabelle 1, ich möchte in der Lage sein, die reduzierten Datensätze zu behalten, und dann Tabelle 2 für den Rabatt, der mit dem Verkauf verknüpft ist, anhängen. Kann nicht die erste Tabelle 1 funktioniert – penfold255

Verwandte Themen