2016-01-13 23 views
0

我有3個表格,如下所示。你會看到他們是如何加入的。只顯示連接副本的TOP 1值結果

Orders Table 
+---------+------------+ 
| Orderid | LocationId | 
+---------+------------+ 
| 36  | 14   | 
| 38  | 13   | 
+---------+------------+ 

OrdersDetails Table 
+-----------+------------+ 
| Detailsid | OrderId | 
+-----------+------------+ 
| 38  | 36   | 
| 39  | 36   | 
| 40  | 38   | 
+-----------+------------+ 

OrderLocations 
+------------+------------+ 
| Locationid | DistanceKM | 
+------------+------------+ 
| 13   | 550  | 
| 14   | 245  | 
+------------+------------+ 

在做內部連接的3個表,我們得到的:

enter image description here

我不想有重複DistanceKM,恩。 245.我想一個0,而不是行項目2這樣的:

enter image description here

回答

1

這裏是我的解決方案:

創建表:

CREATE TABLE #Orders 
        (
      Orderid INT, LocationId INT 
        ); 

INSERT INTO #Orders 
VALUES 
     (36, 14 
     ), 
     (38, 13 
     ); 

CREATE TABLE #OrdersDetails 
          (
      Detailsid INT, OrderId INT 
          ); 

INSERT INTO #OrdersDetails 
VALUES 
     (38, 36 
     ), 
     (39, 36 
     ), 
     (40, 38 
     ); 

CREATE TABLE #OrderLocations 
          (
      Locationid INT, DistanceKM INT 
          ); 

INSERT INTO #OrderLocations 
VALUES 
     (13, 550 
     ), 
     (14, 245 
     ); 

的實際查詢:

;WITH cte 
    AS 
     (SELECT o.Orderid, d.Detailsid, l.DistanceKM, ROW_NUMBER() OVER 
                     (PARTITION BY l.DistanceKM ORDER BY o.Orderid 
                     ) AS rn 
     FROM #Orders AS o 
     INNER JOIN 
     #OrdersDetails AS d 
     ON o.Orderid = d.OrderId 
     INNER JOIN 
     #OrderLocations AS l 
     ON o.LocationId = l.Locationid 
     ) 
    SELECT cte.Orderid, cte.Detailsid, 
          CASE 
           WHEN cte.rn > 1 
           THEN 0 
           ELSE cte.DistanceKM 
          END AS DistanceKM 
    FROM CTE; 

這裏是結果:

enter image description here

+0

謝謝,這工作很好! – Francis