在SQL中超过100,000行的整个列中进行过程循环

时间:2019-03-29 20:54:50

标签: sql procedure

我有一个查询,该查询将遍历许多表,这些表将添加count(*)以创建ID的完成百分比。它的编写方式只能让您一次找到1个ID的百分比。我需要运行它来获取超过100,000个ID的所有百分比。

我试图使@ID的值很多,但得到错误:

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

我已经尝试过工会,但是由于有很多价值观,这似乎是一种浪费。我也尝试重写查询,但是由于涉及的表太多,并且存在错误的余地,如果有更简单的方法,我也不想走那条路线。

下面是我实际使用的简单版本。

DECLARE @ID INT
SELECT @ID = (SELECT ID FROM table WHERE date > 2018)

SELECT 
    @ID ID, 
    SUM(CASE WHEN [BITFIELD] > 0 THEN 1 ELSE 0 END) AS IS_COMPLETED
FROM 
    Table

我得到的数据:

 ID           is_complete
 -------------------------
 1                15

我想要的数据:

ID           is_complete
------------------------
 1              15       
 2             100       
 3              20 

2 个答案:

答案 0 :(得分:1)

您可以对表和GROUP BY ID进行汇总,如下所示:

SELECT 
    ID
    , SUM(CASE WHEN [BITFIELD] > 0 THEN 1 ELSE 0 END) AS IS_COMPLETED
FROM Table
WHERE date > 2018
GROUP BY ID

答案 1 :(得分:1)

您似乎只是想要GROUP BY。但是对于比率/百分比,我建议使用AVG()

SELECT ID,
       AVG(CASE WHEN BITFIELD > 0 THEN 1.0 ELSE 0 END) AS ratio_is_completed
FROM Table
WHERE date > 2018
GROUP BY ID