webForumDet fria alternativet

SQL Join

Databaser & SQL

3 svar · 994 visningar · startad av firstchoice

Medlem sedan okt. 2001615 inlägg
Frågan#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?

Medlem sedan jan. 20023 327 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]
Medlem sedan okt. 2001615 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.

Medlem sedan dec. 200012 464 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

252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)