Я выбрал SQL-запрос, который возвращает данные в указанных мной столбцах (Customer, Product, Mnth, Previous Yr, Current Yr, Variance), которые я экспортирую в таблицу Excel.
В Excel я добавил в таблицу столбец (Переместить) с формулами If и Sumifs, которые возвращают да или нет на основе критериев в других столбцах.
Я считаю, что тот случай, когда это эквивалентно if в SQL Server, но я не могу понять, как сделать случай, когда по строке.
По сути, в заявлении IF просто указывается клиентом, для каждого соответствующего периода между прошлым и нынешним годом, какой продукт они используют меньше и какой продукт они используют в настоящее время, что означает, что они перешли от одного продукта к другому.
См. Код Excel и SQL ниже и снимок экрана с результатами в Excel.
Версия Excel с отступом:
=IF(
[@Product]="Product 1",
IF(
AND(
[@Variance]<0,
OR(
SUMIFS([Variance],[Customer],[@Customer],[mnth],[@mnth],[Product],"Product 2")>0,
SUMIFS([Variance],[Customer],[@Customer],[mnth],[@mnth],[Product],"Product 3")>0
)
),
"Yes",
"No"
),
IF(
[@Product]="Product 2",
IF(
AND(
[@Variance]<0,
SUMIFS([Variance],[Customer],[@Customer],[mnth],[@mnth],[Product],"Product 3")>0
),
"Yes",
"No"
),
IF(
AND(
[@Variance]>0,
OR(
SUMIFS([Variance],[Customer],[@Customer],[mnth],[@mnth],[Product],"Product 2")<0,
SUMIFS([Variance],[Customer],[@Customer],[mnth],[@mnth],[Product],"Product 1")<0
)
),
"Yes",
"No"
)
)
)
SQL, который производит первые 6 столбцов прикрепленной картинки:
SELECT
subqry.Customer, subqry.Product, subqry.Mnth,
SUM(subqry.PriorYr) AS Previous Yr,
SUM(subqry.CurrentYr) AS Current Yr,
SUM(subqry.CurrentYr) - SUM(subqry.PriorYr) AS Variance
FROM
(SELECT
Customer, Product,
YEAR(TransactionDate) AS Yr, MONTH(TransactionDate) AS Mnth,
0 AS PriorYr,
SUM(TransactionCharges + OtherCharges) AS CurrentYr
FROM
Storedfunction1 ('01-01-19','03-31-19')
WHERE
Customer <> 'internal' --EXCLUDE INTERNAL CUSTOMERS
AND Product IN ('Product 1', 'Product 2', 'Product 3')
GROUP BY
Customer, Product, YEAR(TransactionDate), MONTH(TransactionDate)
UNION ALL
SELECT
Customer, Product,
YEAR(TransactionDate) AS Yr, MONTH(TransactionDate) AS Mnth,
SUM(TransationCharges + OtherCharges) AS PriorYr,
0 AS CurrentYr
FROM
Storedfunction1 ('01-01-18','03-31-18')
WHERE
Customer <> 'internal' --EXCLUDE INTERNAL CUSTOMERS
AND Product IN ('Product 1', 'Product 2', 'Product 3')
GROUP BY
Customer, Product, YEAR(TransactionDate), MONTH(TransactionDate)
) Subqry
GROUP BY
subqry.Customer, subqry.Product, subqry.Mnth
ORDER BY
1, 2, 3
Я хотел бы создать 7-й столбец (Переместить) и выполнить вычисления в SQL, а не в Excel, потому что я хочу ограничить вычисления, которые происходят в Excel. Поэтому создайте столбец, который я создаю в Excel в SQL, и выполните также Excel в SQL.
Надеюсь, я достаточно четко объясняю свой запрос и ожидаемые результаты, но дайте мне знать, если мне нужно уточнить. Спасибо