it-swarm.com.de

So kombinieren Sie die Ergebnisse zweier Abfragen in einem einzigen Datensatz

Ich habe zwei Abfragen: Abfragen vereinfacht, jedoch keine Verknüpfungen

Query 1 : select ProductName,NumberofProducts (in inventory) from Table1.....;
Query 2 : select ProductName, NumberofProductssold from Table2......;

Ich würde gerne wissen, wie ich eine Ausgabe erhalten kann als:

ProductName NumberofProducts(in inventory)  ProductName NumberofProductsSold

Die Beziehungen, die zum Abrufen der Ausgaben für jede Abfrage verwendet werden, sind unterschiedlich .. Ich brauche die Ausgabe auf diese Weise für meinen SSRS-Bericht.

(Ich habe die Union-Anweisung ausprobiert, funktioniert aber nicht für die Ausgabe, die ich sehen möchte.)

26
CodeNinja

Hier ist ein Beispiel, das eine Vereinigung zwischen zwei völlig unabhängigen Tabellen ausführt: der Student- und der Products-Tabelle. Es erzeugt eine Ausgabe mit 4 Spalten:

select
        FirstName as Column1,
        LastName as Column2,
        email as Column3,
        null as Column4
    from
        Student
union
select
        ProductName as Column1,
        QuantityPerUnit as Column2,
        null as Column3,
        UnitsInStock as Column4
    from
        Products

Natürlich werden Sie dies für Ihre eigene Umgebung anpassen ...

44
GojiraDeMonstah

Ich glaube, du bist auf etwas dergleichen gefasst. (Verwenden von row_number() mit CTE und Ausführen eines FULL OUTER JOIN)

Fiddle Beispiel

;with t1 as (
  select col1,col2, row_number() over (order by col1) rn
  from table1 
),
t2 as (
  select col3,col4, row_number() over (order by col3) rn
  from table2
)
select col1,col2,col3,col4
from t1 full outer join t2 on t1.rn = t2.rn

Tabellen und Daten:

create table table1 (col1 int, col2 int)
create table table2 (col3 int, col4 int)

insert into table1 values
(1,2),(3,4)

insert into table2 values
(10,11),(30,40),(50,60)

Ergebnisse :

|   COL1 |   COL2 | COL3 | COL4 |
---------------------------------
|      1 |      2 |   10 |   11 |
|      3 |      4 |   30 |   40 |
| (null) | (null) |   50 |   60 |
26
Kaf

Wie wäre es mit,

select
        col1, 
        col2, 
        null col3, 
        null col4 
    from Table1
union all
select 
        null col1, 
        null col2,
        col4 col3, 
        col5 col4 
    from Table2;
11
Jodrell

Das Problem ist, dass Sie, wenn Ihre Tabellen nicht miteinander verbunden sind, nicht bestimmen können, wie sie verbunden werden sollen. Sie müssen also willkürlich beitreten, was zu einem kartesischen Produkt führt:

select Table1.col1, Table1.col2, Table2.col3, Table2.col4
from Table1
cross join Table2

Wenn Sie zum Beispiel folgende Daten hatten:

col1  col2
a     1
b     2

col3  col4
y     98
z     99

Am Ende würden Sie folgendes haben:

col1  col2  col3  col4
a     1     y     98
a     1     z     99
b     2     y     98
b     2     z     99

Ist es das, wonach du suchst? Wenn nicht, und Sie haben einige Möglichkeiten, die Tabellen miteinander in Beziehung zu setzen, müssen Sie dies in die Verbindung der beiden Tabellen aufnehmen, z.

select Table1.col1, Table1.col2, Table2.col3, Table2.col4
from Table1
inner join Table2
on Table1.JoiningField = Table2.JoiningField

Das würde die Dinge für Sie zusammenführen, aber die Daten sind miteinander verbunden, und Sie erhalten Ihr Ergebnis.

2

Wenn Sie meinen, dass beide ProductName-Felder denselben Wert haben sollen, dann gilt Folgendes:

SELECT a.ProductName,a.NumberofProducts,b.ProductName,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;

Oder, wenn Sie möchten, dass die Spalte ProductName nur einmal angezeigt wird,

SELECT a.ProductName,a.NumberofProducts,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;

Wenn ansonsten eine Zeile von Table1 mit einer Zeile von Table2 verknüpft werden kann (obwohl ich mich wirklich wundere, warum jemand das tun möchte), könnten Sie this einen Blick darauf werfen.

2
Roney Michael

Versuche dies:

SELECT ProductName,NumberofProducts ,NumberofProductssold
   FROM table1 
     JOIN table2
     ON table1.ProductName = table2.ProductName
0
www

Laden Sie jede Abfrage in eine Datentabelle:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=143

laden Sie beide Datentabellen in das Dataset:

http://msdn.Microsoft.com/en-us/library/aeskbwf7%28v=vs.80%29.aspx

0
RandomUs1r

Das können Sie tun. Angenommen, Ihre ProductName-Spalte enthält gemeinsame Werte.

SELECT 
     Table1.ProductName, 
     Table1.NumberofProducts, 
     Table2.ProductName, 
     Table2.NumberofProductssold
FROM Table1
INNER JOIN Table2
ON Table1.ProductName= Table2.ProductName
0
Praveen Nambiar