2013-12-11 43 views
0

我有2個不同的查詢。是否可以結合這些查詢?如果可能我該怎麼做?如何將兩個不同的查詢合併到一個表中?

查詢1:http://pastebin.com/pAdP9Yub

 SELECT LatofTruck=Lat, LngofTruck=Lng, SpeedofTruck=Speed 

     FROM TruckLocation 

     JOIN Truck AS Trucks ON Trucks.OID=TruckLocation.TruckID 

     WHERE TruckLocation.OID 

     IN (


     SELECT MAX(TruckLocation_1.OID) AS OID 
     FROM  TruckLocation AS TruckLocation_1 
     JOIN  Truck ON TruckLocation_1.TruckID = Truck.OID GROUP BY 
     TruckLocation_1.TruckID 


    ) 

     ORDER BY TruckLocation.ReadTime DESC 

查詢2:http://pastebin.com/Esx36JHU

 SELECT a_TankLevel1,a_TankLevel2,d_AlertStation,StateOutAlarm,StateOutValve, 

     SensorDataPackage.DeviceID,Branch.FirmName,LatofDealer=Branch.Lat, 

     LngofDealer=Branch.Lng,Branch.City,Branch.FirmPhone,Branch.DealerAdmin 

     FROM SensorDataPackage 

     JOIN Dealer AS Branch ON Branch.DeviceID=SensorDataPackage.DeviceID 

     WHERE SensorDataPackage.OID 

     IN (


     SELECT MAX (SensorDataPackage.OID) 

     FROM SensorDataPackage 

     WHERE SensorDataPackage.readTime > DATEADD(DAY,-100,GETDATE()) 

     GROUP BY SensorDataPackage.DeviceID 

     ) 

     ORDER BY SensorDataPackage.readTime DESC 
+0

'UNION ALL'可以在這裏使用 - 你必須確保你的列名(或別名)是相同的(也是相同的列數) – Milen

+0

發佈結果表結構。 – danihp

+0

看到這篇文章:http://stackoverflow.com/questions/20464167/combining-two-tables-with-sql/20464355#20464355 – Ofir

回答

1

爲此,您可以使用UNION ALL但您必須確保您具有相同數量的列和列類型。所以:

select a, b, c, from x 
union all 
select p, q, r, s, t from y 

不工作,但

select a, b, p, q, t from x 
union all 
select a, b, p, q, t from y 

會工作。

所以你的情況,你會得到這樣的事情:

-- First query. 
SELECT Latitude = Lat 
    , Longitude = Lng 
    , SpeedofTruck = Speed 
    , a_TankLevel1 = null 
    , a_TankLevel2 = null 
    , d_AlertStation = null 
    , StateOutAlarm = null 
    , StateOutValve = null 
    , DeviceID = null 
    , FirmName = null 
    , City = null 
    , FirmPhone = null 
    , DealerAdmin = null 
FROM TruckLocation 
JOIN Truck AS Trucks ON Trucks.OID=TruckLocation.TruckID 
WHERE TruckLocation.OID 
IN (
    SELECT MAX(TruckLocation_1.OID) AS OID 
    FROM  TruckLocation AS TruckLocation_1 
    JOIN  Truck ON TruckLocation_1.TruckID = Truck.OID GROUP BY 
    TruckLocation_1.TruckID 
) 

UNION ALL 

-- Second query. 
SELECT Latitude = Branch.Lat 
    , Longitude = Branch.Lng 
    , SpeedofTruck = null 
    , a_TankLevel1 
    , a_TankLevel2 
    , d_AlertStation 
    , StateOutAlarm 
    , StateOutValve 
    , SensorDataPackage.DeviceID 
    , Branch.FirmName 
    , Branch.City 
    , Branch.FirmPhone 
    , Branch.DealerAdmin 
    FROM SensorDataPackage 
    JOIN Dealer AS Branch ON Branch.DeviceID=SensorDataPackage.DeviceID 
    WHERE SensorDataPackage.OID 
    IN (
    SELECT MAX (SensorDataPackage.OID) 
    FROM SensorDataPackage 
    WHERE SensorDataPackage.readTime > DATEADD(DAY,-100,GETDATE()) 
    GROUP BY SensorDataPackage.DeviceID 
    ) 

這會給您有兩輛貨車和分支機構的經度和緯度的結果集。

+0

嗨,謝謝你的回答。它不顯示LatitudeofBranch = Branch.Lat,LongitudeofBranch = Branch.Lng。結果中顯示LatitudeofTruck = Lat,LongitudeofTruck = Lng。 – Mhmt

+0

Wildenberg如何在此查詢中添加和計算新的2列http://pastebin.com/hudXW4M1(5分鐘前的OldLat和OldLang)您能幫助我嗎? – Mhmt

+0

這個想法是,你得到*一個*緯度和經度的列表,然後你可以使用它們在你的地圖上顯示。如果需要卡車和分支座標的單獨列名稱,只需在第一個查詢中添加兩個額外的虛擬列,然後從第二個查詢中選擇分支的經度和緯度。 –

0

Common Table Expression會幫助你在這種情況下。如果兩個表之間有一些共同的因素,則可以將它們放入同一個查詢中,並將數據輸入到單個查詢中。我多次使用過這個功能。 View也是一個很好的替代解決方案。

相關問題