【发布时间】:2019-05-03 19:37:06
【问题描述】:
我选择了 SQL 查询,该查询返回我指定的列中的数据(客户、产品、月份、上一年度、当前年度、差异),我将其导出到 Excel 表。
在 Excel 中,我使用 If 和 Sumifs 公式向表 (Move) 添加了一列,该公式根据其他列中的条件返回是或否。
我相信 case when 相当于 SQL Server 中的 if,但我不知道如何按行处理 case。
基本上,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"
)
)
)
生成所附图片前 6 列的 SQL:
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 中发生的计算。因此,在 SQL 中创建我在 Excel 中创建的列,并在 SQL 中执行 Excel ifs。
我希望我足够清楚地解释我的请求和预期结果,但如果我需要澄清,请告诉我。谢谢
【问题讨论】:
-
恐怕我们不能将您的图像用作数据,所以这使得它变得更加困难。 Excel 工作表和 SQL Server 表是完全不同的,因此如果不将表想象成工作表,那么您实际上需要做的第一件事。就个人而言,我认为您最好向我们展示您的示例数据是什么样子(格式为
text或 DDL 和 DML 语句),然后向我们展示您所追求的结果。在这里告诉我们您的 Excel 表达式可能只是一种干扰,因为语法非常不同。
标签: sql-server