我有一个查询,该查询将遍历许多表,这些表将添加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
答案 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