我正在计算表格中所需记录的分位数。 表中只有两列,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'附近的语法不正确。
答案 0 :(得分:1)
通常这样写:
SELECT *
FROM X
JOIN Y
ON X.key = Y.key
我没有看到键或ON子句。
我想知道你是否真的需要GROUP BY。听起来你想把值放入桶中。我认为你甚至不能接近你所拥有的东西。
也许这更像你想要的东西:
答案 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