强制在sql查询中计算(*)的上限

时间:2010-09-19 14:44:28

标签: sql tsql

我使用子查询将计数作为整数值返回到我的主查询。此查询用于重新绑定ASP.NET DataGrid,我只有两个可用于此列的字符宽度。我想将宽度限制为两个字符。所以,当计数超过99时,我想将值设置为99.我无法想办法做到这一点?我在这里看不到如何应用案例陈述。

SELECT
     MEMB_ID,
     MEMB_Name,
     SELECT COUNT(*)
 FROM SessionOrder
WHERE SessionOrder.SORD_MEMB_ID = m.MEMB_ID 
  And SessionOrder.SORD_NumberCompleteDownloads <> 0
     As MEMB_Downloads,
     MEMB_JoinDate
FROM Member

如何做到这一点?

6 个答案:

答案 0 :(得分:2)

替换

COUNT(*)

CASE WHEN COUNT(*) > 99 THEN 99 ELSE COUNT(*) END AS YourColumnName

答案 1 :(得分:1)

CASE表达式如下所示:

CASE WHEN COUNT(*) > 99 THEN 99 ELSE COUNT(*) END

现有查询似乎存在一些错误(例如,m未定义)。纠正这些错误并进行上述更改后,生成的查询可能如下所示:

SELECT
     MEMB_ID,
     MEMB_Name,
     (
         SELECT CASE WHEN COUNT(*) > 99 THEN 99 ELSE COUNT(*) END
         FROM SessionOrder
         WHERE SessionOrder.SORD_MEMB_ID = MEMB_ID 
         AND SessionOrder.SORD_NumberCompleteDownloads <> 0
     ) AS MEMB_Downloads,
     MEMB_JoinDate
FROM Member

答案 2 :(得分:1)

这可能会更有效率。因为它可以在达到第99天时停止扫描行。

SELECT MEMB_ID  ,
       MEMB_Name,
       ( SELECT COUNT(*)
       FROM    ( 
               SELECT TOP 99 * 
               FROM SessionOrder
               WHERE   SessionOrder.SORD_MEMB_ID = MEMB_ID
               AND     SessionOrder.SORD_NumberCompleteDownloads <> 0
               )
               Top99
       ) AS MEMB_Downloads,
       MEMB_JoinDate
FROM   Member

答案 3 :(得分:1)

而不是更改COUNT(*)结果,最好计算最多99:

SELECT
     MEMB_ID,
     MEMB_Name,
     (SELECT COUNT(*)
       FROM (
        SELECT TOP(99) *
        FROM SessionOrder
        WHERE SessionOrder.SORD_MEMB_ID = m.MEMB_ID 
        And SessionOrder.SORD_NumberCompleteDownloads <> 0)
       as TOP99_Downloads)
     As MEMB_Downloads,
     MEMB_JoinDate
FROM Member;

这样,当您只显示99时,可以避免计算所有下载量。当然,如果开始时不正确,可以询问显示值的重点是什么,以及为什么不使UI层能够显示“超过99”。

答案 4 :(得分:0)

CASE应该是......

答案 5 :(得分:0)

或将UNION加倍     选择          MEMB_ID,          MEMB_Name,          SELECT COUNT(*)AS WC      来自SessionOrder     WHERE SessionOrder.SORD_MEMB_ID = m.MEMB_ID       和SessionOrder.SORD_NumberCompleteDownloads&lt;&gt; 0       并且WC =&lt; 99          作为MEMB_Downloads,          MEMB_JoinDate      来自会员 联盟    选择         MEMB_ID,         MEMB_Name,         99 AS WC     来自SessionOrder    WHERE SessionOrder.SORD_MEMB_ID = m.MEMB_ID      和SessionOrder.SORD_NumberCompleteDownloads&lt;&gt; 0      和WC&gt; 99         作为MEMB_Downloads,         MEMB_JoinDate    来自会员