0

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

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

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

(

选择计数(X2)作为排名

来自 EMCDX5y_test

WHERE CONVERT(decimal(8,3), X2) < (SELECT X2 as Current_Level

来自 EMCDX5y_test

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

)

作为 r

内部联接

(

选择计数(X2)作为总计

来自 EMCDX5y_test

) 作为 t

#

这是错误消息

服务器:消息 156,级别 15,状态 1,第 8 行

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

服务器:消息 156,级别 15,状态 1,第 13 行

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

4

2 回答 2

1

通常这样写:

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

我没有看到键或 ON 子句。

我想知道你是否真的需要一个 GROUP BY。听起来您想将值放入存储桶中。我认为你甚至不接近你所拥有的。

也许这更多是您想要的:

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

于 2013-09-26T17:34:19.400 回答
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 查询产生奇怪的结果

于 2013-09-26T17:42:26.923 回答