【发布时间】:2018-08-09 23:19:15
【问题描述】:
例如,这会返回 55 的 ORDER NUMBER 和 55 的 Calc_ORDER_NUMBER_LAG,Calc_Qty_Changed 列不会给我 2,即使它们相等...
USE MfgMetrics
SELECT
[ORDER NUMBER],
[Calc_ORDER_NUMBER_LAG] = LAG([ORDER NUMBER],1,0)
OVER (Order By [ORDER NUMBER],[FileDate]),
--Order Number and File Date
[Order_Quantity],
[Calc_Order_Quantity_LAG] = LAG([Order_Quantity],1,0)
OVER (Order By [ORDER NUMBER], [FileDate]),
[Calc_Qty_Changed] =
(CASE
WHEN [ORDER NUMBER] = [Calc_ORDER_NUMBER_LAG] THEN 2
WHEN [ORDER NUMBER] != [Calc_ORDER_NUMBER_LAG] AND
[Order_Quantity] != [Calc_Order_Quantity_LAG] AND
[ACTUAL START DATE] != 0 AND
[FileDate] >= [ACTUAL START DATE] THEN 1
ELSE 0
END)
FROM
dbo.Table_II
为什么每次都跳到ELSE 0,即使满足其他CASE WHEN条件?
【问题讨论】:
-
需要查看您的数据和结果。
-
单独查询是没有用的。给出示例输入和输出。
-
我很难相信所写的查询实际上会运行。当它在计算中遇到列别名时,它应该抛出一个 Invalid Column Name 错误。顺便说一句,这就是建议的答案有效的原因。
标签: sql-server case-when dbo