2017-01-04 7 views
0

私はそのクエリを持っている:内部結合の2番目のテーブルから列ごとに上位1番目の列を選択する方法はありますか?

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 

私はヌルによって異なるSampleValue列を有する第2のテーブルの最後の行を形成する必要があるので、私は一つの問題を持って、このクエリは私5000行を生成します。 2番目のテーブル( "Orders_Samples")の条件をどのように置くのですか?

私はちょうど第二のテーブルのためにこの条件が必要になります。SampleValueは 注文DESC

NULLではありません トップ(1)イニシャル私は、内側がすべての日付は良いですが、私は私のインナーを入れたときに参加していない場合必要以上にディスプレイに参加してください。 Orders_Samplesテーブルのnullと異なる最後の行だけが必要です。

ありがとうございました。

+0

あなたは、MySQLやMS SQL Serverを使用していますか? (関与していない製品にはタグを付けないでください) – jarlh

+0

すべていいですね... – Vladut

答えて

2

使用CROSS APPLY代わり:

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 ... 
関連する問題