例如,我有两列A和B。
A列包含数字1 - 10。B列包含月份1月-10月
我需要帮助编写逻辑,查看列B并返回列A中2个月前的值。例如,列B是三月,我想返回一月的值。
我猜我可以使用某种CASE逻辑来做到这一点?
CASE WHEN ColB = 'March' THEN (Select ColA where ColB = 'January')
我知道上面的逻辑是错误的,我正在努力理解如何做到这一点。有什么想法吗?
谢谢
更新:这个例子是一个非常大的过度简化...我遇到了一个错误时,使用任何逻辑每个人都建议...
值得补充的是,我在列A中的每个数据点都有多个事例。我的查询中还有其他列是唯一的,因此我不能使用DISTINCT。
'子查询返回了多个值。当子查询跟在=、!=、〈、〈=、〉、〉=之后或子查询用作表达式时,不允许出现这种情况”
4条答案
按热度按时间yvt65v4c1#
如果要查看结果,必须先选择表,请尝试以下操作
ui7jx7zq2#
我认为你最好是自己加入:
演示:SQL小提琴
这适用于所有月份,但您可以将其限制在您的示例中:
nom7f22z3#
您已经接近了,可以这样做(但这将返回9个空行和一个有效行)
或者可以不用
CASE
就完成参见此处的第二次运行示例
olhwl3o24#
听起来你需要一个通用的解决方案。不幸的是,像这样存储月份名称并不是很有效。但是你可以通过一个self-join来实现: