Хорошее место для начала - использовать оконную функцию. Одна проблема заключается в том, что вы хотите усреднить значения, полученные из разных столбцов, и у которых может быть разное количество случаев.
Я думаю, что вам нужно разбить вычисление, чтобы вычислить среднее: сложите значения и разделите их на сумму вхождений.
Рассмотрим:
SELECT *
FROM (
SELECT
s.*,
(
0.0 +
COALESCE(SUM(CASE WHEN goal_met = 'Y' THEN sales_index END) OVER(
PARTITION BY product_id
ORDER BY sales_period
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
), 0)
+ COALESCE(SUM(CASE WHEN goal_met = 'N' THEN sales_index END) OVER(
PARTITION BY product_sub
ORDER BY sales_period
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
), 0)
) / (
COALESCE(SUM(goal_met = 'Y') OVER(
PARTITION BY product_id
ORDER BY sales_period
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
), 0)
+ COALESCE(SUM(goal_met = 'N') OVER(
PARTITION BY product_sub
ORDER BY sales_period
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
), 0)
) AS sales_index_goal
FROM sales_performance s
) x WHERE product_ID = 'C12'
В эта скрипка БД с вашими данными выборки возвращает:
| product_ID | sales_period | sales_qty | sales_index | product_sub | goal_met | sales_index_goal |
| ---------- | ------------ | --------- | ----------- | ----------- | -------- | ------------------ |
| C12 | 1 | 15 | 20 | D71 | Y | |
| C12 | 2 | 15 | 30 | C05 | Y | 20 |
| C12 | 3 | 5 | 4 | F20 | N | 21.666666666666668 |
Они одинаковые:
HttpContext.Error
возвращает первую ошибку.
HttpContext.Server
возвращает экземпляр класса HttpServerUtility
, который предоставляет вспомогательные оболочки для HttpContext
, включая