0
votes

Sélectionnez le prix le moins cher, puis regroupez-le par le fournisseur?

Je souhaite fournir à l'équipe d'achat technique avec un paramètre de fournisseur par défaut pour leur faire savoir où commander une pièce. Ceci est basé sur une table appelée Price_book. Pour cela, j'ai besoin d'une nouvelle table avec le numéro de choix, le prix le moins cher et le code de fournisseur pour le traiter via le système. Comment puis-je sélectionner uniquement le fournisseur qui fournit le prix le moins cher?

Je fais cela pour simplifier le processus de commande de l'équipe de prunvasing technique. Je suis venu jusqu'à présent que je n'ai que le prix le moins cher par fournisseur (concernant la quantité minimale de commande). Quelle pièce je manque est la partie que seul un fournisseur avec le prix le moins cher est sélectionné. SO PARNOMBER le prix le moins cher avec le fournisseur correspondant.

La requête est assez courte: xxx

La clause WHERE n'est pas importante car elle n'a pas à faire Avec des processus internes.

Le résultat doit être une liste avec les colonnes Parnumber, le prix et le fournisseur correspondant. PAR NUMÉTH NOMBRE Il ne devrait y avoir que le prix le moins cher avec le fournisseur.


2 commentaires

N'importe quel choix dans la requête?


Ohh désolé! Vient d'ajouter la déclaration sélectionnée


4 Réponses :


0
votes

Essayez haut (1) avec des liens xxx


4 commentaires

T-SQL Server ne reconnaît pas la déclaration avec les liens. Le message qui apparaît est "syntaxe incorrecte près du mot clé" avec ""


@ Dominic.Landertert, tag DBMS correctement. Cette réponse est pour les versions MS SQL Server Server Away Server.


J'ai demandé au système responsable et il m'a assuré que c'est T-SQL.


DOCS. microsoft.com/en-us/sql/t-sql/queries/... haut (1) avec les cravates est pris en charge depuis 2008. Quelle est votre version?



0
votes

Vous pouvez essayer la fonction Windows à cette fin, le code serait similaire à celui ci-dessous (P> Remarque - Le code n'est pas testé. P>

SELECT * from
(SELECT pb.partno,pb.supplier,pb.purch_price * c.rate as price, 
row_number() over(partition by pb.partno,pb.supplier order by pb.purch_price * c.rate )rn
FROM price_book pb
LEFT JOIN currency c ON c.currency = pb.currency
WHERE pb.contract_id <> 0
AND pb.expire_date > Datediff(Day, '31 Dec 1971', Getdate())
AND pb.order_type = 'P'
AND pb.condition = 'N')a
where a.rn=1


6 commentaires

Mon serveur SQL ne reconnaît pas la déclaration over. Le message qui apparaît est "syntaxe incorrecte près du mot clé" sur ""


Vous voulez dire MSSQL?


Nous utilisons T-SQL dans la société. Et ce n'est pas dans une application Windows, mais un logiciel d'aviation très spécifique.


TSQL, prend en charge la clause.


Votre message d'erreur indique mon SQL, le serveur que vous mentionnez est faux, vous n'utilisez pas TSQL que vous utilisez mon SQL. Mon SQL n'a pas sur la clause autant que je sache. vous devriez changer la balise en question à mon SQL


Je viens de demander aux responsabilités du système et ils m'ont dit que c'est définitivement T-SQL.



0
votes

Regardez:

DECLARE @priceBook TABLE (PriceID       INT IDENTITY(1, 1)
,                         PartNo        NVARCHAR(10)
,                         Price         DECIMAL(18, 2)
,                         fk_SupplierID INT);

INSERT INTO @priceBook (PartNo, Price, fk_SupplierID)
VALUES (N'123', 8.99, 1)
,      (N'123', 9.99, 2)
,      (N'456', 10.99, 1)
,      (N'456', 3.99, 2)
,      (N'456', 12.99, 3);

WITH cte AS
    (SELECT PriceID
     ,      PartNo
     ,      Price
     ,      fk_SupplierID
     ,      ROW_NUMBER() OVER (PARTITION BY PartNo
ORDER BY Price ASC) RN
       FROM @priceBook)
SELECT  cte.PriceID
,       cte.PartNo
,       cte.Price
,       cte.fk_SupplierID
  FROM  cte
 WHERE  rn = 1;


7 commentaires

Ici, je reçois un message d'erreur indiquant "Un lot doit commencer par une commande SELECT / UPDATE / INSERT / DELETE" "


Pouvez-vous confirmer si vous utilisez MySQL ou MS SQL Server?


Selon l'administrateur système, nous utilisons T-SQL


T-SQL est la langue - ce que nous recherchons est le type de serveur. T-SQL implique Microsoft SQL Server, mais vos messages d'erreur suggèrent autre chose.


Je ne sais pas si c'est la réponse que vous recherchez, mais est-ce que Sybase SGMS 15.7?


C'est la réponse que je cherchais - mais pas la réponse que j'espérais. Pour que la référence future, Sybase n'est pas la même que Microsofts SQL-Server, ce qui explique pourquoi vous avez des difficultés avec vos réponses. Sybase aurait été une meilleure étiquette et aurait donné des réponses plus spécifiques à votre système. Bien qu'il y ait beaucoup de similitudes, ils ne sont pas la même chose malheureusement.


Je vais considérer cela pour mon prochain qustion. Désolé!



0
votes

J'ai trouvé maintenant un code qui fonctionne pour moi: xxx

merci beaucoup pour le soutien que vous m'avez donné les gars !!

" Dominic


0 commentaires