Иметь цикл процедуры через весь столбец из более чем 100 000 строк в SQL - PullRequest
0 голосов
/ 29 марта 2019

У меня есть запрос, который будет проходить через множество таблиц, которые добавят count(*), чтобы создать процент выполнения для идентификатора. То, как это было написано, позволяет вам найти процент за 1 ID за раз. Мне нужно запустить это, чтобы получить все проценты для более чем 100 000 идентификаторов.

Я пытался сделать так, чтобы @ID имел значение много, но получаю ошибку:

Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Я пробовал объединение, но поскольку существует много ценностей, это кажется пустой тратой. Я также попытался переписать запрос, но так как в нем задействовано очень много таблиц и есть место для ошибок, я не хочу идти по этому пути, если есть более простой путь.

Ниже приведена более простая версия того, с чем я на самом деле работаю.

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 ]

1 голос
/ 30 марта 2019

Кажется, вы просто хотите 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
1 голос
/ 29 марта 2019

Вы можете просто выполнить агрегирование на своей таблице и GROUP BY идентификатор, например:

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