2013-09-26 81 views
0

我正在計算表中所需記錄的分位數。 表中只有兩列,X1 < - 日期,X2 < - 價格SQL中的麻煩連接兩條SELECT語句

我使用第一個select語句來計算小於期望日期的記錄數;第二個選擇語句來計算總記錄數

每個SELECT語句都運行良好,但我無法將它們連接在一起,任何提示?

SELECT COUNT(X2)AS秩

FROM EMCDX5y_test

WHERE CONVERT(十進制(8,3),X2)<(SELECT X2如CURRENT_LEVEL

FROM EMCDX5y_test

WHERE X1 =(從EMCDX5y_test中選擇最大值(X1)))

爲r

INNER JOIN

SELECT COUNT(X2)AS總

FROM EMCDX5y_test

)爲t

這裏是錯誤消息

服務器:消息156,級別15,狀態1,第8行關鍵字 '爲' 附近

不正確的語法。

服務器:消息156,級別15,狀態1,行13

關鍵字 '爲' 附近

不正確的語法。

+0

你沒有連接條件,例如「INNER JOIN foo ON bar」...... DB應該如何知道如何將這兩個「表」聯繫起來? –

+0

我試過「on 1 = 1」,因爲每個語句的結果只有一個數字,實際上沒有特定的條件。但它沒有奏效。 – simeonyyyyyy

+0

你可能想要一個UNION查詢。連接應該在相關數據之間,但是你只是試圖找出兩個完全不同的值。你有任何理由做這個查詢?不管你如何構造事物,數據庫仍然會運行至少2個獨立的查詢。 –

回答

1

通常這樣寫:

SELECT * 
FROM X 
JOIN Y 
ON X.key = Y.key 

我沒有看到或鍵ON子句。

我想知道你是否真的需要GROUP BY。這聽起來像你想把價值投入桶中。我不認爲你甚至與你有什麼關係。

也許這更是你想要什麼:

http://technet.microsoft.com/en-us/library/ms175126.aspx

1

如果我沒有缺席過的東西,你的查詢可以取得多大simplier:

select 
    sum(case when <condition here> then 1 else 0 end) as cnt1 
    count(*) as cnt2 
from EMCDX5y_test 

如果你真的想保留您的查詢原樣,您可以使用

select 
    (first query) as <something>, 
    (second query) as <something> 

或者, MS:

select 
    (
     select count(t.X2) 
     from EMCDX5y_test as t 
     where 
      convert(decimal(8,3), t.X2) < 
      (
       select tt.X2 
       from EMCDX5y_test as tt 
       where tt.X1 = (select max(ttt.X1) from EMCDX5y_test as ttt) 
     ) 
    ) as rank, 
    (
     select count(t.X2) 
     from EMCDX5y_test as t 
    ) as total 

注別名和<alias>.<column notation> - 它不是真正的安全使用大量的子查詢,而不別名 - 見SQL IN query produces strange result

+0

好點,謝謝。我會嘗試這種方式 – simeonyyyyyy