У меня есть следующий набор данных:
EVENT_ID MENU_HINT EVENT_NAME SELECTION_ID EVENT_DT WIN_LOSE BSP
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276642 16-Jun-18 0 46.91005891
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19052159 16-Jun-18 0 9.2
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276641 16-Jun-18 0 11
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276644 16-Jun-18 0 7.698731493
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276646 16-Jun-18 0 421.7295978
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276645 16-Jun-18 0 89.22199353
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276647 16-Jun-18 0 150
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276643 16-Jun-18 0 48.90986662
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276650 16-Jun-18 1 3.466233972
144705336 AUS / KemG (AUS) 16th Jun R3 1000m 2yo 19276640 16-Jun-18 0 2.88
Для этого мне нужно вычислить несколько дополнительных столбцов, например:
CountWinnerNotPrice89to1000Runners7to12
и
SumWinnerNotPrice89to1000Runners7to12
Лог c для CountWinnerNotPrice89to1000Runners7to12
: счет event_id со следующими условиями:
- BSP должен быть между 89 и 1000 (3 строки покрывают это)
- "win_lose" должно быть 0 (так как это "без цены")
- общее количество event_id должно быть от 7 до 12 (количество участников)
Таким образом, результат этого столбца должен быть равен 3, и для SumWinnerNotPrice89to1000Runners7to12
применяются те же условия, но я должен вернуть СУММУ столбцов BSP, так что результат равен 660,95
Это один пример с эти данные, у меня есть несколько столбцов, еще один пример, если у меня есть
CountWinnerNotPrice7to15Runners7to12
SumWinnerNotPrice7to15Runners7to12
, то результаты, так как BSP будет между 7 и 15, будут
CountWinnerNotPrice7to15Runners7to12 = 3
SumWinnerNotPrice7to15Runners7to12 = 27.89
Я должен сделать много такого типа столбцов, но я не понимаю правильный способ сделать этот тип условий.
Я пробовал с CASE в избранном, но я не могу заставить его работать, когда мне нужно учитывать количество бегунов. Я также пытался использовать скалярные функции (для возврата данных требуются целые годы)
Я думаю, что logi c должен выполняться без необходимости рекурсивного поиска (я думаю, что нет CTE), поскольку у меня около 900 столбцов для добавить, и это, безусловно, убьет его.
Как может быть лог c для этого с делом? Я думаю, что что-то упустил, так как я пытался подобным образом:
SELECT COUNT(td.EVENT_NAME),
td.SELECTION_NAME,
SUM(CASE
WHEN(td.BSP >= 89
AND td.BSP < 1000)
AND td.WIN_LOSE = 0
AND COUNT(td.EVENT_NAME) > 7 --this doesn't work
AND COUNT(td.EVENT_NAME) <= 12 --this doesn't work
THEN td.BSP
END) AS SumWinnerRunners
FROM tblData td
WHERE td.EVENT_ID = 144705336
GROUP BY td.SELECTION_NAME,
td.BSP;
Я думаю, что я не так далеко, но я не могу довести это до финиша sh здесь.