Je voudrais compter plusieurs articles dans les 3 tables:Count lignes uniques de 3 tables de jointure
- "Total" - Les Serialnumbers au total dans un lot (batch est les 3 premiers chiffres du Numéro de série)
- "Call_Per_Code" - Compter les codes uniques avec un callnr pour chaque lot
- "NOCALL" - Compter les codes uniques sans callnr pour chaque lot
données exemples ci-dessous:
Table Test1
CallNr CallType
1 rej
2 rej
3 rej
4 rej
5 QC
6 QC
7 rej
8 rej
Table Test2
CallNr Code
1 201401
3 201402
4 201404
5 201401
7 201401
8 201401
Table Test3
Code PartCode SerialNumber
201401 68001 123-01
201402 68001 123-02
201403 68001 123-03
201404 68001 124-01
201405 68001 124-02
201406 68001 124-03
Le résultat doit être:
Batch Total NoCall Call_Per_Code
123 3 1 2
124 3 2 1
Mais j'obtenir le résultat:
Batch Total NoCall Call_Per_Code
123 3 1 4
124 2 1 1
J'utilise le code SQL sur SQL Server 2012:
SELECT
substring(T3.SerialNumber,1,3) as batch
,COUNT(DISTINCT concat(T3.code,substring(T3.SerialNumber,1,3))) as Total
,sum(case when T2.CallNr is null then 1 else 0 end) as NoCall
,sum(case when T2.CallNr is null then 0 else 1 end) as Call_per_Code
FROM Test1 T1
INNER JOIN Test2 T2
ON T1.CallNr=T2.CallNr AND T1.CallType='rej'
RIGHT JOIN Test3 T3
ON T2.Code=T3.Code
GROUP BY substring(T3.SerialNumber,1,3)
Comment puis-je obtenir le compte correct sur la colonne Call_Per_Code. Le code 201401 avec un CallNr est compte que 3 au lieu de 1.