Bonjour à tous,

Je suis nouvelle sur le forum alors n'hésitez pas à me guider si je ne suis pas sur le bon forum ou si ma question a déjà été abordée.

Je vous demande de l'aide car je suis débutante sur SQL et je rencontre le problème suivant :

Données que j'ai:

- Une table temporaire #TEMP_NF (3 colonnes : article1, numProd, numSérie)
- Une table temporaire #TEMP_NP (3 colonnes: article2, numProd, numSérie)

Ce que je voudrais:

Un résultat sous forme d'une table de 4 colonnes qui comporte pour un même numProd, les articles en écart dans les 2 tables temporaires, ie:
- Colonne 1: articles dans #TEMP_NF non existants dans #TEMP_NP
- Colonne 2: articles dans #TEMP_NP non existants dans #TEMP_NF
- Colonne 3: numProd correspondant
- Colonne 4: numSérie correspondant

Ce que j'ai essayé et qui ne marche pas du tout (je ne suis pas à l'aise dans les jointures):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
SELECT DISTINCT 
ITEMID AS 'AT dans NP et pas dans NF', 
BENPRICINGITEM AS 'AT dans NF et pas dans NP', 
#TEMP_NP.COLLECTREFPRODID, 
#TEMP_NP.BENPRODGROUPNUMBER FROM #TEMP_NP
LEFT JOIN #TEMP_NF ON #TEMP_NP.COLLECTREFPRODID = #TEMP_NF.COLLECTREFPRODID
UNION 
SELECT DISTINCT ITEMID AS 'AT dans NP et pas dans NF', BENPRICINGITEM AS 'AT dans NF et pas dans NP', #TEMP_NF.COLLECTREFPRODID, #TEMP_NF.BENPRODGROUPNUMBER FROM #TEMP_NF
LEFT JOIN #TEMP_NP ON #TEMP_NP.COLLECTREFPRODID = #TEMP_NF.COLLECTREFPRODID

Ma requête complète:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DECLARE @dateMin date
DECLARE @dateMax date
 
SET @dateMin = '03/10/2016'
SET @dateMax = '07/10/2016'
 
-- Liste des nomenclatures de production (NP)
IF OBJECT_ID(N'tempdb..#TEMP_NP') IS NOT NULL
       DROP TABLE #TEMP_NP
select A.itemid, b.COLLECTREFPRODID, b.BENPRODGROUPNUMBER INTO #TEMP_NP from BOM A 
INNER JOIN PRODTABLE B ON A.BOMID = B.BOMID WHERE 
LEN(A.ITEMID) >= 11 AND A.ITEMID NOT LIKE 'PL_%'AND B.COLLECTREFPRODID IN (
(SELECT Distinct C.COLLECTREFPRODID  from PRODTABLE C 
WHERE C.SCHEDSTART BETWEEN @dateMin AND @dateMax
AND C.ITEMID LIKE '%_PROD')
)
 
-- Liste des nomenclatures fonctionnelles des MH_EXPE (NF)
IF OBJECT_ID(N'tempdb..#TEMP_NF') IS NOT NULL
       DROP TABLE #TEMP_NF
SELECT DISTINCT A.BENPRICINGITEM, B.COLLECTREFPRODID, B.BENPRODGROUPNUMBER INTO #TEMP_NF FROM PRODBOM A
INNER JOIN PRODTABLE B ON B.PRODID = A.PRODID
WHERE A.BENPRICINGITEM <> '' AND A.BENPRICINGITEM <> 'TPC' AND A.BENPRICINGITEM NOT LIKE 'T_%' 
AND B.COLLECTREFPRODID IN (
(SELECT Distinct C.COLLECTREFPRODID  from PRODTABLE C 
WHERE C.SCHEDSTART BETWEEN @dateMin AND @dateMax
AND C.ITEMID LIKE '%_PROD')
)
 
SELECT DISTINCT 
ITEMID AS 'AT dans NP et pas dans NF', 
BENPRICINGITEM AS 'AT dans NF et pas dans NP', 
#TEMP_NP.COLLECTREFPRODID, 
#TEMP_NP.BENPRODGROUPNUMBER FROM #TEMP_NP
LEFT JOIN #TEMP_NF ON #TEMP_NP.ITEMID = #TEMP_NF.BENPRICINGITEM
UNION 
SELECT DISTINCT ITEMID AS 'AT dans NP et pas dans NF', BENPRICINGITEM AS 'AT dans NF et pas dans NP', #TEMP_NF.COLLECTREFPRODID, #TEMP_NF.BENPRODGROUPNUMBER FROM #TEMP_NF
LEFT JOIN #TEMP_NP ON #TEMP_NP.ITEMID = #TEMP_NF.BENPRICINGITEM
Pourriez-vous m'aiguiller sur la fonction à tester s'il vous plait?

N'hésitez pas à revenir vers moi s'il manque des précisions.

Merci par avance pour votre aide.

Bon après-midi à vous.