rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est marqué à null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2
FROM ( SELECT mt1.OutilId, mt1.LienId,
count(*) AS nb
FROM ASSOCIE AS mt1
INNER JOIN ASSOCIE AS mt2
ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId
GROUP BY mt1.OutilId, mt1.LienId
) AS SR
GROUP BY OutilId
) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un Chemin
Ex :
IdLien - Chemin
1200 - c:\test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2 )
124 - c:\test.... - c:\test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1
Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Chemin2
FROM (
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2
FROM ( SELECT mt1.OutilId, mt1.LienId,
count(*) AS nb
FROM ASSOCIE AS mt1
INNER JOIN ASSOCIE AS mt2
ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId
GROUP BY mt1.OutilId, mt1.LienId
) AS SR
GROUP BY OutilId
) as Tb1 , Lien
INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1
LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2
rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est marqué à null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count(*) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1.LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un Chemin
Ex :
IdLien - Chemin 1200 - c:test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2 ) 124 - c:test.... - c:test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1 Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Chemin2 FROM ( SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count(*) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1.LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1 LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2
Je vous remercie beaucoup
Essaye avec ceci (à adapter) :
TRANSFORM First(T.Chemin) AS Valeur SELECT R.OutilId FROM [SELECT A.OutilId, A.LienId, Count(*) AS NbLien FROM ASSOCIE AS A INNER JOIN ASSOCIE AS B ON A.OutilId=B.OutilId And A.LienId<=B.LienId GROUP BY A.OutilId, A.LienId]. AS R INNER JOIN LaTableChemin AS T ON R.LienId=T.IdLien GROUP BY R.OutilId PIVOT "Chemin" & R.NbLien;
Bonjour,
kanak09 a écrit :
Bonjour,
J'ai un soucis de jointure entre deux tables .
J'ai une 1ere requête qui me donne une table du type :
rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est marqué à
null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when
2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2
FROM ( SELECT mt1.OutilId, mt1.LienId,
count(*) AS nb
FROM ASSOCIE AS mt1
INNER JOIN ASSOCIE AS mt2
ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId
GROUP BY mt1.OutilId, mt1.LienId
) AS SR
GROUP BY OutilId
) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un
Chemin
Ex :
IdLien - Chemin
1200 - c:test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2
)
124 - c:test.... - c:test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1
Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias
utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Chemin2
FROM (
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb
when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2
FROM ( SELECT mt1.OutilId, mt1.LienId,
count(*) AS nb
FROM ASSOCIE AS mt1
INNER JOIN ASSOCIE AS mt2
ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId
GROUP BY mt1.OutilId, mt1.LienId
) AS SR
GROUP BY OutilId
) as Tb1 , Lien
INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1
LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2
Je vous remercie beaucoup
Essaye avec ceci (à adapter) :
TRANSFORM First(T.Chemin) AS Valeur
SELECT R.OutilId
FROM [SELECT A.OutilId, A.LienId, Count(*) AS NbLien
FROM ASSOCIE AS A INNER JOIN ASSOCIE AS B
ON A.OutilId=B.OutilId And A.LienId<=B.LienId
GROUP BY A.OutilId, A.LienId]. AS R INNER JOIN LaTableChemin AS T ON R.LienId=T.IdLien
GROUP BY R.OutilId
PIVOT "Chemin" & R.NbLien;
rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est marqué à null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count(*) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1.LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un Chemin
Ex :
IdLien - Chemin 1200 - c:test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2 ) 124 - c:test.... - c:test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1 Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Chemin2 FROM ( SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count(*) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.OutilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1.LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1 LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2
Je vous remercie beaucoup
Essaye avec ceci (à adapter) :
TRANSFORM First(T.Chemin) AS Valeur SELECT R.OutilId FROM [SELECT A.OutilId, A.LienId, Count(*) AS NbLien FROM ASSOCIE AS A INNER JOIN ASSOCIE AS B ON A.OutilId=B.OutilId And A.LienId<=B.LienId GROUP BY A.OutilId, A.LienId]. AS R INNER JOIN LaTableChemin AS T ON R.LienId=T.IdLien GROUP BY R.OutilId PIVOT "Chemin" & R.NbLien;
zoltix
Je n'aime pas trop ta requête car c'est un peu récursif alors je te conseil d'utiliser les With CTE. Je ne vais pas l'écrire pour toi mais n'hésite pas a poster des messages si tu as des soucis.
rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est mar qué à null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count( *) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.Ou tilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1 .LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un Chemin
Ex :
IdLien - Chemin 1200 - c:test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2 ) 124 - c:test.... - c:test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1 Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Ch emin2 FROM ( SELECT OutilId, max(case nb when 1 then L ienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count( *) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.Ou tilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1 .LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1 LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2
Je vous remercie beaucoup
Je n'aime pas trop ta requête car c'est un peu récursif alors je te
conseil d'utiliser les With CTE.
Je ne vais pas l'écrire pour toi mais n'hésite pas a poster des
messages si tu as des soucis.
rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est mar qué à
null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when
2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2
FROM ( SELECT mt1.OutilId, mt1.LienId,
count( *) AS nb
FROM ASSOCIE AS mt1
INNER JOIN ASSOCIE AS mt2
ON mt2.OutilId = mt1.Ou tilId AND mt2.LienId <= mt1.LienId
GROUP BY mt1.OutilId, mt1 .LienId
) AS SR
GROUP BY OutilId
) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un
Chemin
Ex :
IdLien - Chemin
1200 - c:test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2
)
124 - c:test.... - c:test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1
Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias
utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Ch emin2
FROM (
SELECT OutilId, max(case nb when 1 then L ienId end) AS Lien1, max(case nb
when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2
FROM ( SELECT mt1.OutilId, mt1.LienId,
count( *) AS nb
FROM ASSOCIE AS mt1
INNER JOIN ASSOCIE AS mt2
ON mt2.OutilId = mt1.Ou tilId AND mt2.LienId <= mt1.LienId
GROUP BY mt1.OutilId, mt1 .LienId
) AS SR
GROUP BY OutilId
) as Tb1 , Lien
INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1
LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2
Je n'aime pas trop ta requête car c'est un peu récursif alors je te conseil d'utiliser les With CTE. Je ne vais pas l'écrire pour toi mais n'hésite pas a poster des messages si tu as des soucis.
rq : un outil peut avoir 1 ou 2 lien , si il n'a qu'un lien le 2e est mar qué à null
Voici la requete
SELECT OutilId, max(case nb when 1 then LienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count( *) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.Ou tilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1 .LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien
Ensuite j'ai une table existante dans ma base qui associe à chaque Lien un Chemin
Ex :
IdLien - Chemin 1200 - c:test...
Ce que je souhaite c'est d'obtenir une table contenant
Outild - Chemin1 ( correspondant au Lien1 ) - Chemin2 ( correspondant au Lien2 ) 124 - c:test.... - c:test2...
Voici la requete que je test mais qui me renvoie une erreur
Server: Msg 107, Level 16, State 1, Line 1 Le préfixe de colonne 'Tb1' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
SELECT Tb1.OutilId, Tb1.Lien1, Tb1.Lien2, L1.Chemin Chemin1, L2.Chemin Ch emin2 FROM ( SELECT OutilId, max(case nb when 1 then L ienId end) AS Lien1, max(case nb when 2 then LienId end) AS Lien2 , Chemin as Chem1, Chemin as Chem2 FROM ( SELECT mt1.OutilId, mt1.LienId, count( *) AS nb FROM ASSOCIE AS mt1 INNER JOIN ASSOCIE AS mt2 ON mt2.OutilId = mt1.Ou tilId AND mt2.LienId <= mt1.LienId GROUP BY mt1.OutilId, mt1 .LienId ) AS SR
GROUP BY OutilId ) as Tb1 , Lien INNER JOIN Lien L1 ON L1.IDLien = Tb1.Lien1 LEFT JOIN Lien L2 ON L2.IDLien = Tb1.Lien2