2013-07-22 37 views
0

我最近寫了一個網站,使用mysql作爲數據庫,現在我想改變我的數據庫到sql server,但我有我的查詢這麼多問題...我會被告知mysql和sql server查詢非常相似,但我似乎無法弄清楚這一點!從sql服務器的查詢相當於

SELECT 
    datos.NumEstacion, MAX(datos.Fecha), datos.NumFuncion, datos.Valor, parametros_mi.nombre AS NombreParametro, funciones_mi.Nombre AS NombreFunction 
FROM 
    (datos JOIN parametros_mi ON datos.NumParametro=parametros_mi.NumParametro) JOIN funciones_mi ON datos.NumFuncion=funciones_mi.NumFuncion 
WHERE 
    datos.NumEstacion=1844 AND ((parametros_mi.nombre, funciones_mi.Nombre) IN (('Battery Level', 'Avg.'), ('Relative Humidity', 'Avg.'), ('Rain', 'Accu'), ('Air Temperature', 'Avg.'), ('Wind Speed', 'Avg.'), ('Wind Direction', 'Avg.'), ('Atmosferic Pressure', 'Avg.'), ('Global Radiation 1', 'Avg.'), ('Visibility', 'Ins.'), ('Snow Level', 'Avg.'), ('Present Weather', 'Ins.'), ('IRS Road Temperature', 'Avg.'), ('IRS Salt Concentration', 'Avg.'), ('IRS Freezing Temperature', 'Avg.'), ('IRS Water Film', 'Avg.'), ('IRS Road Condition', 'Ins.'), ('IRS Up Ground Temperature', 'Avg.'), ('IRS Down Ground Temperature', 'Avg.'), ('ARS Freezing Temperature', 'Avg.'), ('ARS Road Temperature', 'Avg.'), ('ARS Freezing Temperature Corrected', 'Avg.'), ('Freezing Prediction 2 Hours', 'Ins.'), ('IDI Road Condition', 'Ins.'), ('IDI Road Temperature', 'Avg.'))) 
GROUP BY 
    datos.NumParametro, datos.NumFuncion 
+0

那麼,你想作爲輸出什麼? – Novice

+0

我有一個數據表,其中包含空氣溫度,風和其他氣象數據的數據以及它們被捕獲的時間。但是這些數據的類型在另一個表中(parametros_mi和funciones_mi),並且有一個數據類型爲數字的外鍵。我想要一些在IN部分中指定的類型的最後一個值。 – Ehphan

回答

1

你必須改變

(parametros_mi.nombre, funciones_mi.Nombre) IN (('Battery Level', 'Avg.'), ...) 

(parametros_mi.nombre = 'Battery Level' AND funciones_mi.Nombre = 'Avg.') OR ... 

,你需要使用在選擇列表列聚合函數(MAX()MIN()等),它們不屬於由...組成的或由他們組成的。

嘗試

SELECT 
    MAX(datos.NumEstacion), 
    MAX(datos.Fecha), 
    datos.NumFuncion, 
    MAX(datos.Valor), 
    MAX(parametros_mi.nombre) AS NombreParametro, 
    MAX(funciones_mi.Nombre) AS NombreFunction 
FROM 
    datos JOIN parametros_mi 
ON datos.NumParametro=parametros_mi.NumParametro JOIN funciones_mi 
ON datos.NumFuncion=funciones_mi.NumFuncion 
WHERE 
    datos.NumEstacion=1844 
    AND 
    ((parametros_mi.nombre = 'Battery Level' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Relative Humidity' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Rain' 
    AND funciones_mi.Nombre = 'Accu') OR 
    (parametros_mi.nombre = 'Air Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Wind Speed' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Wind Direction' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Atmosferic Pressure' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Global Radiation 1' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Visibility' 
    AND funciones_mi.Nombre = 'Ins.') OR 
    (parametros_mi.nombre = 'Snow Level' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Present Weather' 
    AND funciones_mi.Nombre = 'Ins.') OR 
    (parametros_mi.nombre = 'IRS Road Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'IRS Salt Concentration' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'IRS Freezing Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'IRS Water Film' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'IRS Road Condition' 
    AND funciones_mi.Nombre = 'Ins.') OR 
    (parametros_mi.nombre = 'IRS Up Ground Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'IRS Down Ground Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'ARS Freezing Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'ARS Road Temperature' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'ARS Freezing Temperature Corrected' 
    AND funciones_mi.Nombre = 'Avg.') OR 
    (parametros_mi.nombre = 'Freezing Prediction 2 Hours' 
    AND funciones_mi.Nombre = 'Ins.') OR 
    (parametros_mi.nombre = 'IDI Road Condition' 
    AND funciones_mi.Nombre = 'Ins.') OR 
    (parametros_mi.nombre = 'IDI Road Temperatu 
    re' AND funciones_mi.Nombre = 'Avg.')) 
GROUP BY 
    datos.NumParametro, datos.NumFuncion 
+0

我想我必須做一些最大的功能。它引發以下錯誤:列'datos.NumEstacion'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。確切地說, – Ehphan

+1

。與MySql不同,所有主要的RDBMS都不允許在select中使用不屬於group by或某些聚合函數的列。 – peterm

+0

謝謝它的工作!但是我還有一個問題@peterm。如果我想使用AVG,那麼所有的選擇都應該是AVG嗎?或者我應該使用其他? – Ehphan