0

4 つのテーブルから複数の内部結合を持つテーブルを作成しましたが、結果は重複したレコードを返します。ここで私が使用しているコード

SELECT   tblLoadStop.LoadID,
         tblCustomer.CustomerID,
         tblLoadMaster.BillingID,
         tblLoadMaster.LoadID,
         tblLoadMaster.PayBetween1,
         LoadStopID,
         tblLoadMaster.Paybetween2,
         tblStopLocation.StopLocationID,
         tblStopLocation.city,
         tblStopLocation.state,
         tblStopLocation.zipcode,
         tblLoadSpecifications.LoadID,
         tblLoadSpecifications.LoadSpecificationID,
         Picks,
         Stops,
         Typeofshipment,
         Weight,
         LoadSpecClass,
         Miles,
         CommodityList,
         OriginationCity,
         OriginationState,
         DestinationCity,
         DestinationState,
         LoadRate,
         Status,
         CompanyName,
         Customerflag,
         tblCustomer.CustomerID,
         tblCustomer.AddressLine1,
         tblCustomer.City,
         tblCustomer.State,
         tblCustomer.Zipcode,
         CompanyPhoneNumber,
         CompanyFaxNumber,
         SCAC,
         tblLoadMaster.Salesperson,
         Change,
         StopType
FROM     tblLoadMaster
            INNER JOIN tblLoadSpecifications 
                  ON tblLoadSpecifications.LoadID = tblLoadMaster.LoadID
            INNER JOIN tblLoadStop
                   ON tblLoadStop.LoadID = tblLoadMaster.LoadID
            INNER JOIN tblStopLocation
                   ON tblStopLocation.StopLocationID = tblLoadStop.StopLocationID
            INNER JOIN tblCustomer
                   ON tblCustomer.CustomerID = tblLoadMaster.CustomerID
WHERE    tblLoadMaster.Phase LIKE '%2%'
ORDER BY tblLoadMaster.LoadID DESC;

これは私が得る結果です

Load ID   Customer   Salesperson     Origin  Destination     Rate    
-------------------------------------------------------------------------
13356     FedEx           Alex           Duluth    New York     300
13356     FedEx           Steve          Florida   Kansas       400

最初の行だけを表示したいのですが、

13356     FedEx           Alex           Duluth    New York     300

一番下の行を削除し、

13356     FedEx           Steve          Florida   Kansas       400

tblLoadStop テーブルには、tblloadMaster テーブルからの重複する LoadID を持つ重複レコードがあります

4

1 に答える 1

2

SQL Server 2005以降を使用している場合、1つのアプローチはCTE(共通テーブル式)を使用することです(その点で十分に具体的ではありません)。

この CTE を使用すると、データをいくつかの基準 (つまり、独自のもの) でパーティション分割LoadIDし、SQL Server に、これらの「パーティション」ごとに 1 から始まるすべての行に番号を付けて、いくつかの基準で並べ替えることができます (どのように決定するかについてはあまり明確ではありません)質問でどの行を保持し、どの行を無視するか)。

だから、次のようなことを試してください:

;WITH CTE AS
(
   SELECT 
       LoadID, Customer, Salesperson, Origin, Destination, Rate,
       RowNum = ROW_NUMBER() OVER(PARTITION BY LoadID ORDER BY tblLoadstopID ASC) 
   FROM 
       dbo.tblLoadMaster lm
     ......
   WHERE
      lm.Phase LIKE '%2%'
)
SELECT 
   LoadID, Customer, Salesperson, Origin, Destination, Rate
FROM 
   CTE
WHERE
   RowNum = 1

ここでは、各「パーティション」(つまり、各)の「最初の」エントリのみを選択しています-CTEで定義する必要がLoadIdあるいくつかの基準(更新:注文順-前述のとおり)で並べ替えます。tblLoadstopID

それはあなたが探しているものに近づきますか??

于 2013-01-06T15:56:16.223 に答える