0

テーブル内の目的のレコードの分位数を計算しています。テーブルには X1 <- 日付、X2 <- 価格の 2 つの列しかありません。

最初の select ステートメントを使用して、目的の日付のレコード数よりも少ないレコード数をカウントします。合計レコード数をカウントする 2 番目の select ステートメント

各 SELECT ステートメントは正常に実行されますが、それらを JOIN するのに問題があります。何かヒントはありますか?

(

SELECT カウント(X2) AS ランク

EMCDX5y_test から

WHERE CONVERT(decimal(8,3), X2) < (Current_Level として X2 を選択

EMCDX5y_test から

WHERE X1 =(EMCDX5y_test から max(X1) を選択) )

)

として

内部結合

(

SELECT カウント (X2) AS 合計

EMCDX5y_test から

) として

#

ここにエラーメッセージがあります

サーバー: メッセージ 156、レベル 15、状態 1、行 8

キーワード「as」付近の構文が正しくありません。

サーバー: メッセージ 156、レベル 15、状態 1、行 13

キーワード「as」付近の構文が正しくありません。

4

2 に答える 2

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 に答える