2

我知道您可以通过以下方式将值分配给选择中的变量

SELECT @blahBlah = (tbl.ProductGroup) 
FROM tbl

好的,现在我需要做的如下。

每个账户/用户每天都有一定数量的交易允许;例如。账户 1 可以进行 5 笔交易,账户 2 可以进行 3 笔交易。

因此,在将确定此帐户是否超出其限制以及超出多少的选择中,我们有大量inSelect计算来生成列数据。

问题是我们现在有大约 4 列,每列都将执行嵌套选择以从另一个表中获取限制,以便为当前表生成一个值。

理想的做法是将这些限制分配给@variableselect 语句中的 a ,并在需要时仅在所述语句中引用该变量。

举一个简单的例子(不是实际的逻辑):

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 回答