J'ai deux requêtes: Requêtes simplifiées à l'exclusion des jointures
Query 1 : select ProductName,NumberofProducts (in inventory) from Table1.....;
Query 2 : select ProductName, NumberofProductssold from Table2......;
Je voudrais savoir comment je peux obtenir une sortie en tant que:
ProductName NumberofProducts(in inventory) ProductName NumberofProductsSold
Les relations utilisées pour obtenir les sorties pour chaque requête sont différentes . J'ai besoin de cette sortie pour mon rapport SSRS.
(J'ai essayé la déclaration de l'union, mais cela ne fonctionne pas pour la sortie que je veux voir.)
Voici un exemple qui fait une union entre deux tables totalement indépendantes: la table Student et la table Products. Il génère une sortie composée de 4 colonnes:
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
Évidemment, vous allez modifier cela pour votre propre environnement ...
Je pense que vous voulez quelque chose comme ça; (Utilisation de row_number()
avec CTE
et exécution d'un FULL OUTER JOIN
)
;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
Tableaux et données:
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)
Résultats :
| COL1 | COL2 | COL3 | COL4 |
---------------------------------
| 1 | 2 | 10 | 11 |
| 3 | 4 | 30 | 40 |
| (null) | (null) | 50 | 60 |
Que diriez-vous,
select
col1,
col2,
null col3,
null col4
from Table1
union all
select
null col1,
null col2,
col4 col3,
col5 col4
from Table2;
Le problème est que, sauf si vos tables sont liées, vous ne pouvez pas déterminer comment les joindre. Vous devez donc les rejoindre de manière arbitraire, ce qui donne un produit cartésien:
select Table1.col1, Table1.col2, Table2.col3, Table2.col4
from Table1
cross join Table2
Si vous aviez, par exemple, les données suivantes:
col1 col2
a 1
b 2
col3 col4
y 98
z 99
Vous vous retrouveriez avec ce qui suit:
col1 col2 col3 col4
a 1 y 98
a 1 z 99
b 2 y 98
b 2 z 99
Est-ce ce que vous cherchez? Si ce n’est pas le cas et que vous avez le moyen de relier les tables, vous devez inclure cela dans la réunion des deux tables, par exemple:
select Table1.col1, Table1.col2, Table2.col3, Table2.col4
from Table1
inner join Table2
on Table1.JoiningField = Table2.JoiningField
Cela rassemblerait les choses pour vous, mais les données seraient liées, vous donnant votre résultat.
Si vous voulez dire que les deux champs ProductName
doivent avoir la même valeur, alors:
SELECT a.ProductName,a.NumberofProducts,b.ProductName,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;
Ou, si vous souhaitez que la colonne ProductName
ne soit affichée qu'une seule fois,
SELECT a.ProductName,a.NumberofProducts,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;
Sinon, si une ligne de Table1 peut être associée à une ligne de Table2 (même si je me demande vraiment pourquoi quelqu'un voudrait le faire), vous pouvez donner ceci un aspect.
Essaye ça:
SELECT ProductName,NumberofProducts ,NumberofProductssold
FROM table1
JOIN table2
ON table1.ProductName = table2.ProductName
Chargez chaque requête dans un datatable:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=143
chargez les deux tables de données dans le jeu de données:
http://msdn.Microsoft.com/en-us/library/aeskbwf7%28v=vs.80%29.aspx
C'est ce que tu peux faire. En supposant que votre colonne
ProductName
ait des valeurs communes.
SELECT
Table1.ProductName,
Table1.NumberofProducts,
Table2.ProductName,
Table2.NumberofProductssold
FROM Table1
INNER JOIN Table2
ON Table1.ProductName= Table2.ProductName