Bonsoir à tous,

Je rencontre actuellement un souci dans l'execution d'une requete.

Le contexte :
1 table T_ITEMS_ITM contenant :
-ITM_ID (int) clef primaire

1 table T_ATTRIBUTS_ATT contenant :
-ATT_ID (int) clef primaire
-ATT_LIBELLE (varchar(20))

1 table TJ_ATT_ITM_VALUES_ATI contenant :
-ITM_ID (int) clef etrangere
-ATT_ID (int) clef etrangere
-ATI_VALEUR (varchar(512))


La dernière table contient en clefs étrangères les clefs primaires des deux précédentes tables ainsi que la valeur lié à l'attribut de l'item spécifié.

les attributs sont (entre autre) PrixVenteTTC et PrixAchatTTC

Ainsi lorsque j'interroge ma table pour récuperer les prix de vente ou d'achat je suis obligé de caster ATI_VALEUR de maniere a pouvoir comparer les valeurs.. Et c'est la que se pose le souci.

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
 
 
select Item.ITM_ID 
		from T_ITEMS_ITM as Item 
 
		inner join TJ_ATT_ITM_VALUES_ATI as ValeurPrixVente on ValeurPrixVente.ITM_ID = Item.ITM_ID 
		inner join T_ATTRIBUTS_ATT as AttPrixVente on AttPrixVente.ATT_ID = ValeurPrixVente.ATT_ID
 
		inner join TJ_ATT_ITM_VALUES_ATI as ValeurPrixAchat on ValeurPrixAchat.ITM_ID = Item.ITM_ID 
		inner join T_ATTRIBUTS_ATT as AttPrixAchat on AttPrixAchat.ATT_ID = ValeurPrixAchat.ATT_ID
 
		where	
		AttPrixVente.ATT_LIBELLE = 'PrixVenteTtc' and 
		cast( ValeurPrixVente.ATI_VALEUR as int) >= 380 and	
 
		AttPrixAchat.ATT_LIBELLE = 'PrixAchatTtc' and 
		cast( ValeurPrixAchat.ATI_VALEUR as money) >= 180
J'ai aussi essayer ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
select Item.ITM_ID 
		from T_ITEMS_ITM as Item 
 
		inner join TJ_ATT_ITM_VALUES_ATI as ValeurPrixVente on ValeurPrixVente.ITM_ID = Item.ITM_ID and cast( ValeurPrixVente.ATI_VALEUR as money) >= 380
		inner join T_ATTRIBUTS_ATT as AttPrixVente on AttPrixVente.ATT_ID = ValeurPrixVente.ATT_ID and AttPrixVente.ATT_LIBELLE = 'PrixVenteTtc'
 
		inner join TJ_ATT_ITM_VALUES_ATI as ValeurPrixAchat on ValeurPrixAchat.ITM_ID = Item.ITM_ID and cast( ValeurPrixAchat.ATI_VALEUR as money) >= 180
		inner join T_ATTRIBUTS_ATT as AttPrixAchat on AttPrixAchat.ATT_ID = ValeurPrixAchat.ATT_ID and AttPrixAchat.ATT_LIBELLE = 'PrixAchatTtc'

L'erreur est la suivante :
Msg 245, Niveau 16, État 1, Ligne 3
Échec de la conversion de la valeur varchar 'BA003348' en type de données money.


'BA003348' étant la valeur d'un autre attribut (representant le code de mon produit).

Ce que je ne comprend pas, c'est que le cast tente de s'effectuer sur une valeur d'attribut que je n'ai pas spécifier dans la jointure.

De plus, si je vire la jointure correspondant au prix d'achat, la requête s'exécute sans erreur...

Voila, si quelqu'un pouvait m'aiguiller, je galeres pas mal et je ne comprend absolument pas d'ou vient le probleme ...

Merci beaucoup à tous.

NB: Je suis sous SQL Server 2008 Express Edition