2

選択内の変数に値を割り当てることができることを認識しています

SELECT @blahBlah = (tbl.ProductGroup) 
FROM tbl

わかりました、今私がする必要があるのは次のとおりです。

各アカウント/ユーザーには、毎日許可されるトランザクション数が設定されています。例えば。口座 1 は 5 回の取引を行うことができ、口座 2 は 3 回の取引を行うことができます。

inSelectしたがって、このアカウントが制限を超えているかどうか、およびその上限を超えているかどうかを判断する select では、列データを生成するための多数の計算が行われます。

問題は、現在のテーブルの値を生成するために、ネストされた選択を実行して別のテーブルから制限を取得する約 4 つの列があることです。

理想的なのは、これらの制限を select ステートメントの a に割り当て@variable、必要に応じてそのステートメント内でその変数のみを参照することです。

簡単な例を挙げると(実際のロジックではありません):

SELECT
  @Limit = (SELECT Limit From tClient Where tClient.clientId = tbl.ClientId),
  (select count(*) from batch where batchItemCount > @limit) AS BadBatches,
  ....
FROM TBL

あなたは絵を手に入れます。

これを取り除く方法はありますか?

4

2 に答える 2

1

はい、共通テーブル式 (CTE)を使用して、これらのことを行うことができます。以下は、ケースで機能させるために微調整できる基本的な考え方です。

;WITH limtis AS
(
   SELECT Limit, ClientId
   From tClient 
   Where tClient.clientId = tbl.ClientId
)
select ...
from batch
INNER JOIN Limtis On ...
WHERE ...

あなたが絵を手に入れたことを願っています。

于 2012-09-06T12:51:02.427 に答える
0

このようなことを試してください

select clientid from tClient as t1 inner join batch as t2
 on t1.clientId=t2.clientId
 group by clientId
 having sum(batchItemCount)>sum(limit)
于 2012-09-06T12:52:27.657 に答える