SQL中加入两个SELECT语句的麻烦

时间:2013-09-26 17:28:55

标签: sql select join

我正在计算表格中所需记录的分位数。 表中只有两列,X1< - date,X2< - price

我使用第一个select语句来计算小于所需日期的记录数;第二个选择语句来计算总记录数

每个SELECT语句运行良好,但我很难将它们连接在一起,任何提示?

  

     

SELECT count(X2)AS rank

     

FROM EMCDX5y_test

     

WHERE CONVERT(十进制(8,3),X2)< (选择X2作为Current_Level

     

FROM EMCDX5y_test

     

WHERE X1 =(从EMCDX5y_test中选择max(X1)))

     

     

作为r

     

INNER JOIN

     

     

SELECT count(X2)AS total

     

FROM EMCDX5y_test

     

)as t

这是错误消息

  

服务器:Msg 156,Level 15,State 1,Line 8

     

关键字'as'附近的语法不正确。

     

服务器:Msg 156,Level 15,State 1,Line 13

     

关键字'as'附近的语法不正确。

2 个答案:

答案 0 :(得分:1)

通常这样写:

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

我没有看到键或ON子句。

我想知道你是否真的需要GROUP BY。听起来你想把值放入桶中。我认为你甚至不能接近你所拥有的东西。

也许这更像你想要的东西:

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

答案 1 :(得分:1)

如果我没有错过任何内容,您的查询可以变得更简单:

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>

或者,在您的条款中:

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