2016-10-13 1 views
0

des idées sur la façon de hiérarchiser la ligne avec des critères avec le même matériau? J'ai besoin de capturer la valeur de SG (division) dans ma requête. J'ai une requête de base de seulement 227 288 lignes, et du fichier brut que Im obtenant ces valeurs est d'environ 300,00 ++, mon problème est chaque fois que je cours ma requête avec le numéro de base, il capture uniquement le premier matériel à partir de lignes.Définir des critères de priorité dans les lignes dans la requête

ID    MATERIAL    DIVISION     SCOP(price) 

1     a9000     FR390      90 
2     b6790     TB900      20 
3     a9000     SG2011     35 
4     b6790     EU8089     90 

par le haut exemple de 227,288 fichiers, pour le matériel A9000 la valeur du prix que je reçois est 90 quand soi-disant que je dois avoir la valeur de 35 à partir SG2011, autre que SG2011, toutes les valeurs d'autres divisions sont correctes, c.-à-d. pour b6790, il est bon d'avoir la valeur de prix de 20. division SG2011 prix est la priorité pour les matériaux. J'utilise MS Access 2007, je fais des choses en mode Design ou SQL view. souhaite vous les gars pourrait me aider avec des codes simples .. (iff..statements ou simplement dans la vue du design ..) ou une vue SQL dans Ms Access

Modifier

Ci-dessous ma requête SQL (test de la requête - cela ne laisse se joindre à la requête de base car il ne correspond pas au nombre de lignes, mais j'ai pu montrer le multiple matériel)

SELECT Base_CSC.ID, Base_CSC.Material, SC_and_Purchase_Price.[Logistic Ref], SC_and_Purchase_Price.[Commercial Ref], Left([Division],2) & ([Commercial Ref]) AS [Comm Ref], Left([Division],2) & ([Logistic Ref]) AS [Log Ref], IIf(Left([Comm Ref],'2')="SG",[SCOP],'') AS [SCOP SG], SC_and_Purchase_Price.[SC in AUD] AS SCOP 
FROM Base_CSC LEFT JOIN SC_and_Purchase_Price ON (Base_CSC.Material = SC_and_Purchase_Price.[Commercial Ref]) AND (Base_CSC.Material = SC_and_Purchase_Price.[Logistic Ref]) 
ORDER BY Base_CSC.ID; 

Query Test - image de ma requête de test pour montrer la matériaux. comme indiqué Matériel: LV433620 a 3 résultat pour matériel. mais une fois que je lance ma requête finale

Final Output Query - Image de ma requête de sortie

matériel LV433620 a la valeur de la première ligne quand soi-disant je avais besoin la sortie de SCOP SG - (je viens de faire le terrain scop SG à distinguer) Ainsi, au lieu de 257,42. J'ai besoin de la valeur SCOP 215.50 pour le matériel LV433620.

ci-dessous est pour la requête de sortie finale vue SQL

SELECT Base_CSC.ID, Base_CSC.Material, Base_CSC.[Vendor Reference], Base_CSC.[Default Vendor], First(IIf(IsNull([scop3_v2.SCOP]),[scop3_v2_1.SCOP],[scop3_v2.SCOP])) AS SCOP 
FROM (Base_CSC LEFT JOIN scop3_v2 AS scop3_v2_1 ON Base_CSC.Material = scop3_v2_1.scop1.SCOPLookup) LEFT JOIN scop3_v2 ON Base_CSC.Material = scop3_v2.scop2.SCOPLookup 
GROUP BY Base_CSC.ID, Base_CSC.Material, Base_CSC.[Vendor Reference], Base_CSC.[Default Vendor] 
ORDER BY Base_CSC.ID; 
+0

format vous répondez correctement @anne –

+0

Votre question est assez vague. S'il y a un enregistrement pour un matériau spécifique ayant la division SG2011, alors récupérez le prix lié à SG2011 (quel prix, le plus bas, le plus élevé car il pourrait y avoir plusieurs rangées par combinaison matériau/division?). Sinon, le plus bas (?) Prix? Qu'avez-vous essayé jusqu'à présent? S'il vous plaît inclure des questions. – Rene

+0

hi @saurabhkamble J'ai édité souhaite que vous pourriez aider. merci – Anne

Répondre

0

SOLVED : à partir du problème signalé, j'ai créé une série de requêtes.à partir de la table source brute que j'ai créé 1er: Matériel avec compte unique (fait avec le critère 1) 2ème: Matériel avec la division sans SG et 3ème: Matériel avec la division SG,

avec ce code sous la requête de matériel avec SG

`SCOPE: IIf([Query_SC_and_Purchase_Price_Scope_SG].[SCOPE] Is Null,[Query_SC_and_Purchase_Price_Scope_NO_SG].[SCOPE],[Query_SC_and_Purchase_Price_Scope_SG].[SCOPE])` 

pour le matériel avec le code SG requête

SCOP: IIf([Query_SC_and_Purchase_Price_Scope_SG].[SCOPE] Is Null,[Query_SC_and_Purchase_Price_Scope_NO_SG].[SCOPE],[Query_SC_and_Purchase_Price_Scope_SG].[SCOPE]) 

Rassembler toutes ces données et vérifier que j'ai créé une requête UNION ALL

`SELECT Query_SC_and_Purchase_Price_Scope_Unique.* 
    FROM Query_SC_and_Purchase_Price_Scope_Unique 
    UNION ALL 
    SELECT Query_SC_and_Purchase_Price_Scope_SGNOSG_SG.* 
    FROM Query_SC_and_Purchase_Price_Scope_SGNOSG_SG 
    UNION ALL SELECT Query_SC_and_Purchase_Price_Scope_SGNOSG_NOSG.* 
    FROM Query_SC_and_Purchase_Price_Scope_SGNOSG_NOSG; 
    ` 

Je suis venu avec mes valeurs correctes.

0

pas sûr d'avoir compris, mais pour le DIVISION de l'ID le plus bas pour chaque MATERIAL vous pouvez utiliser NOT EXISTS():

SELECT * FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE t.Material = s.material AND s.id > t.id) 
+0

J'ai une requête de base nommée (Base_Query) avec 227 288 lignes où j'ai laissé joindre dans la table (Table d'achat) la source des fichiers bruts de la division et les prix avec 300,00 ++ lignes. ma requête de sortie exécutée ne devrait avoir que 227 288 par lignes de base. leurs propriétés de jointure sont la colonne 'Matériau'. mon problème est que la requête ne prend que la première ligne de matériel pour les doublons comme indiqué ci-dessus pour le matériel en double de a9000 il a fallu le prix de la division FR390 (prix: 90) où j'ai besoin du prix de SG2011. – Anne

+0

Publiez votre requête et la sortie actuelle et requise. Cela pourrait aider à clarifier ce que vous cherchez (vous persistez à être complètement vague). Et répondez à chaque fois que quelqu'un vous demande des éclaircissements. – Rene

+0

hi @Rene J'ai modifié. souhaite que tu puisses aider. Merci – Anne