【解決方法】上位 10 件のレコードから最高のレコードを選択する VB.NET


vb.net 2017 の SQL サーバー テーブルの上位 10 レコードから最高のレコードを取得しようとしています。

"select max(DAYCLOSE) from Tbl_Back_Data_Nse where DAYCLOSE=(Select TOP(10) DAYCLOSE from Tbl_Back_Data_Nse where Tbl_Back_Data_Nse.ISIN ='INE358A01014' and SERIES ='EQ')")

エラーが発生する

サブクエリが複数の値を返しました。 サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

クエリを修正する方法

私が試したこと:

"select max(DAYCLOSE) from Tbl_Back_Data_Nse where DAYCLOSE=(Select TOP(10) DAYCLOSE from Tbl_Back_Data_Nse where Tbl_Back_Data_Nse.ISIN ='INE358A01014' and SERIES ='EQ')"

解決策 1

最初に、TOP セットを選択する場合は、ORDER BY 句を指定する必要があります。そうしないと、SQL が任意の順序で行を返すことができます。 ただ言って SELECT TOP 順序付けは適用されません。

次に、エラーは非常に具体的です: サブクエリ (SELECT TOP(10) ... ) テーブルに一致する行が 1 つしかない場合を除き、常に複数の値を返します。 返された行を単一の値と比較しているため、システムはあなたが何を意味しているのかわかりません。「本から切り取ったこれらの 10 ページに一致する果物をくれ」

比較するには、等号の両側に 1 つの値を指定する必要があります。

必要な順序がわかりませんが、次のようにしてみてください。

SQL
SELECT MAX(DayClose) FROM 
  FROM (SELECT TOP (10) DayClose 
          FROM Tbl_Back_Data
          WHERE Tbl_Back_Data_Nse.ISIN ='INE358A01014' 
            AND SERIES ='EQ'
          ORDER BY InsertDate ASC)

解決策 2

次の式を見てください。

SQL
... where DAYCLOSE=(Select TOP(10) ...

システムは、単一の変数を多数のレコードと比較することはできません。 ここで達成しようとしていることを再考する必要があります。

コメント

タイトルとURLをコピーしました