2017-01-04 3 views
0

Ich habe diese Abfrage:Wie wählen Sie Top 1 Reihenfolge desc nach Spalte aus der zweiten Tabelle in inneren Join?

SELECT  Orders_Header.OrderID, Orders_Header.Plant, Orders_Header.OrderType, Orders_Header.ShortYear, Orders_Header.OrderNo, Orders_Header.OrderDate, 
         Orders_Header.ReceivedDate, Orders_Header.ProductionDate, Orders_Header.DVMOrderNumber, Orders_Header.Requester, Orders_Header.RequesterPhone, 
         Orders_Header.Substitute, Orders_Header.SubstitutePhone, Orders_Header.ProjectNumber, Orders_Header.CostCenter, Orders_Header.CostResponsable, 
         Orders_Header.BudgedDepartment, Orders_Header.BatchNumber, Orders_Header.PartName, Orders_Header.PartNumber, Orders_Header.Drawing, 
         Orders_Header.TotalSamples, Orders_Header.CostCategory, Orders_Header.ControlPlanType, Orders_Header.ControlPlanName, Orders_Header.Status, 
         Orders_Header.OverallProductRating, Orders_Header.Customer, Orders_Header.Supplier, Orders_Header.StoragePolicy, Orders_Header.OrderDescription, 
         Orders_Header.KeepSamples, Orders_Header.PicturesRequired, Orders_Header.VideoRequired, Orders_Header.AttendanceRequired, Orders_Header.ClosingDate, 
         Orders_Header.ClosingUserName, Orders_Header.TargetDate, Orders_Header.CustomerIncomingDate, Orders_Header.ShippingMode, 
         Orders_Header.SampleInvoiceValue, Orders_Header.ShippingCost, Orders_Header.MaterialCost, Orders_Header.Invoiceable, Orders_Header.InvoiceValue, 
         Orders_Header.InvoiceNumber, Orders_Header.InvoiceDate, Orders_Header.Urgent, Orders_Header.SampleOrderType, Orders_Header.FinalCustomerAddress, 
         Orders_Header.ExtraNotice, Orders_Header.SampleLabeling, Orders_Header.UploadFilePath, Orders_Header.Destination, Orders_Header.RecipientName, 
         Orders_Header.ShippingAddress, Orders_Header.PackagingType, Orders_Header.HazardousMaterial, Orders_Header.ExpressShipment, 
         Orders_Header.ExpressCompany, Orders_Header.ExtraQty, Orders_Header.Comments, Orders_Header.AssemblySite, Orders_Header.AssemblyPlannedDate, 
         Orders_Header.AssemblyDate, Orders_Header.ShippmentPlannedDate, Orders_Header.ShippmentDate, Orders_Header.DelayMotive, 
         Orders_Header.LogisticsResponsable, Orders_Header.HasBOM, Orders_Header.HasSerialComponents, Orders_Header.PrototypeComponents, 
         Orders_Header.ReadyForAssembly, Orders_Header.OrderPriority, Orders_Header.DeliveryTime, Orders_Header.RequesterApproval, Orders_Header.ApprovedDate, 
         Orders_Header.PlannedFinishYear, Orders_Header.PlannedFinishWeek, Orders_Header.Designer, Orders_Header.RawMaterial, Orders_Header.SpecialMaterial, 
         Orders_Header.TestArea, Orders_Header.DesignHours, Orders_Header.Temperature, Orders_Header.TestType, Orders_Header.OrderPriority AS Expr2, 
         Orders_Samples.Initials AS Expr1 
FROM   Orders_Header INNER JOIN 
         Orders_Samples ON Orders_Header.OrderNo = Orders_Samples.OrderID 
WHERE  (Orders_Header.Status = 'Engineering check' OR 
         Orders_Header.Status = 'Stand by' OR 
         Orders_Header.Status = 'In work' OR 
         Orders_Header.Status = 'Completely Defined' OR 
         Orders_Header.Status = 'Assembly' OR 
         Orders_Header.Status = 'Post-Assembly' OR 
         Orders_Header.Status = 'Document review' OR 
         Orders_Header.Status = 'Delivery approval' OR 
         Orders_Header.Status = 'Ready for shipping' OR 
         Orders_Header.Status = 'Ready for use' OR 
         Orders_Header.Status = 'Laboratory' OR 
         Orders_Header.Status = 'Packaging' OR 
         Orders_Header.Status = 'Shipping') AND (Orders_Header.OrderType = 'Sample Shop Order') 
ORDER BY Orders_Header.AssemblyPlannedDate, Orders_Header.Substitute 

ich ein Problem haben, diese Abfrage generieren mich 5000 Zeilen, weil ich zweite Tabelle letzte Zeile mit SampleValue Spalte unterschiedlich von null bilden müssen. Wie stelle ich Bedingung für zweite Tabelle ("Orders_Samples")?

Ich brauche diese Bedingung nur für die zweite Tabelle: Top (1) Initialen wo SampleValue IS NOT NULL Reihenfolge ab

Wenn ich nicht beitreten Innen haben alle Termine sind gut, aber wenn ich meine innere setzen Melde dich mehr als ich brauche. Ich brauche nur die letzte Zeile, die sich um null von der Tabelle Orders_Samples unterscheidet.

Danke.

+0

Stehen Sie mit MySQL oder MS SQL Server? (Nicht gekennzeichnete Produkte nicht kennzeichnen.) – jarlh

+0

Alles gut jetzt ... – Vladut

Antwort

2

Verwenden CROSS APPLY statt:

SELECT ... 
FROM Orders_Header 
     CROSS APPLY(SELECT TOP 1 ... FROM Orders_Samples 
        WHERE Orders_Header.OrderNo = Orders_Samples.OrderID AND 
          SampleValue IS NOT NULL 
        ORDER BY SomeColumn DESC) Orders_Samples 
WHERE ... 
ORDER BY ... 
Verwandte Themen