webForumDet fria alternativet

SQL Join

3 svar · 992 visningar · startad av firstchoice

firstchoiceMedlem sedan okt. 2001605 inlägg
#1
SELECT PO.[No_], PO.[Description], PO.[Source No_], PO.[Ending Date], PO.[Quantity], PO.[Sales Order No_], PS.[PrulStatusComments], PS.[PrulStatusPlanDate], PS.[PrulStatusSign], CR.[Cross-Reference No_]
FROM [Production Order] PO
INNER JOIN [Item Cross Reference] CR ON PO.[Source No_] = CR.[Item No_]
LEFT JOIN [tblPrulStatus] PS ON PS.[PrulStatusPrulNr] collate Finnish_Swedish_CS_AS = PO.[No_] collate Finnish_Swedish_CS_AS
WHERE PO.[Status] = '3'
ORDER BY PO.[Ending Date]

Koden fungerar, men problemet är att tabellen [Item Cross Reference] innehåller ibland flera rader som är kopplade till [Production Order]. Men i dessa fallen skulle jag bara vilja visa den första träffen. Är detta möjligt?

CompusaMedlem sedan jan. 20022 952 inlägg
#2

Så här kanske

SELECT PO.[No_], PO.[Description], PO.[Source No_], PO.[Ending Date], PO.[Quantity], PO.[Sales Order No_], PS.[PrulStatusComments], PS.[PrulStatusPlanDate], PS.[PrulStatusSign], CR.[Cross-Reference No_]
FROM [Production Order] PO
INNER JOIN
(
    SELECT DISTINCT [Item No_]
    FROM [Item Cross Reference]
) CR ON PO.[Source No_] = CR.[Item No_]
LEFT JOIN [tblPrulStatus] PS ON PS.[PrulStatusPrulNr] collate Finnish_Swedish_CS_AS = PO.[No_] collate Finnish_Swedish_CS_AS
WHERE PO.[Status] = '3'
ORDER BY PO.[Ending Date]
firstchoiceMedlem sedan okt. 2001605 inlägg
#3

fungerar ifall jag ta bort CR.[Cross-Reference No_] från SELECT

men då visas ju inte just det referäns värde som jag vill ha fram.

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Det beror på vad du menar med första, eftersom tabeller inte är ordnade mängder så är första inte definierat.

select PO.[No_], 
       PO.[Description], 
       PO.[Source No_], 
       PO.[Ending Date], 
       PO.[Quantity], 
       PO.[Sales Order No_], 
       PS.[PrulStatusComments], 
       PS.[PrulStatusPlanDate], 
       PS.[PrulStatusSign], 
       CR.[Cross-Reference No_]
  from [Production Order] PO
  join (select [Item No_],
               min([Cross-Reference No_])
          from [Item Cross Reference]
         group by [Item No_]) as cr
    on PO.[Source No_] = CR.[Item No_]
  left join [tblPrulStatus] PS 
    on PS.[PrulStatusPrulNr] collate Finnish_Swedish_CS_AS = PO.[No_] collate Finnish_Swedish_CS_AS
 where PO.[Status] = 3
 order by PO.[Ending Date]

Detta returnerar det lägsta värdet för CR.[Cross-Reference No_] per produktorder

Genererad på 375 ms · cache AV · v20260730165559-full.f96bc7eb