在select和其他列中分配变量值

时间:2012-09-06 12:44:45

标签: sql sql-server sql-server-2008

我知道您可以通过转到

为选择中的变量赋值
SELECT @blahBlah = (tbl.ProductGroup) 
FROM tbl

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

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

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

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

理想的是将这些限制分配给select语句中的@variable,并且只在需要时引用该语句中的该变量。

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

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

你明白了。

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用Common Table Expression(CTE)来执行这些操作。以下是您可以调整以使其适用于您的案例的基本想法:

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

希望你能得到这张照片。

答案 1 :(得分: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)