La requête ci-dessous extrait les données ci-dessous.Sélection du résultat supérieur de chaque catégorie de produit
J'essaie de ne retourner un résultat unique pour chaque numéro de produit, avec seulement la plus haute orddate, et total de la commande connexe (ordttl) et le coût unitaire (ucost).
Des idées sur la mise en œuvre? Merci pour vos réponses
SELECT
ordln.pnum as 'Product Number',
prod.name as 'Product Name',
ordhd.snum,
sup.name,
ordhd.ordttl,
ORDHD.onum,
ORDHD.orddate,
ordln.ucost
FROM
scmdb.dbo.cksprodm prod (NOLOCK)
INNER JOIN scmdb.dbo.cksordln ordln (NOLOCK) on prod.pnum = ordln.pnum
INNER JOIN scmdb.dbo.cksordhd ordhd (NOLOCK) on ordhd.onum = ordln.onum
LEFT JOIN scmdb.dbo.ckssuplr sup (NOLOCK) on ordhd.snum = coalesce(sup.snum,
sup.asnum)
WHERE ordhd.orddate BETWEEN
DATEADD(month,-6,dateadd(day,datediff(day,0,getdate()),0) + '06:00') AND
GETDATE() -- order date is between 6 months ago and today.
AND ordln.pnum NOT IN (SELECT distinct PNUM
FROM scmdb.dbo.cksquohd qhd
inner join scmdb.dbo.cksquoln qln on qhd.quote = qln.quote
where qhd.qedate > GETDATE()
)
soit utiliser ou rejoindre sur row_number cross appliquer sur le dessus 1 – maSTAShuFu
Peut-il être des liens? Si oui, comment devraient-ils être traités? – HABO
@HABO Il est hautement improbable que cela se produise puisque l'orddate inclut aussi du temps. Si cela se produisait, sélectionner arbitrairement l'un des résultats serait acceptable. –