使用CASE IF逻辑返回列WHEN指定某个变量

问题描述 投票:0回答:4

让我们说比如我有两列A和B.

A列包含数字1 - 10. B列包含1月至10月的月份

我需要帮助编写查看B列的逻辑并返回2个月之前的A列中的值。比如说B列是March,我想返回1月份的值。

我猜我可以使用某种CASE逻辑来做到这一点?

 CASE WHEN ColB = 'March' THEN (Select ColA where ColB = 'January')

我知道上面的逻辑是错误的,我试图理解如何做到这一点。有任何想法吗?

谢谢

更新:这个例子是一个非常大的过度监控......我在使用任何每个人建议的逻辑时遇到错误。

值得补充的是,我在列A中有多个每个数据点的情况。我的查询中还有其他列是唯一的,所以我不能使用DISTINCT。

'子查询返回的值超过1。当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做“

sql sql-server logic case case-when
4个回答
0
投票

如果要查看结果,则必须选择第1个表,试试这个

select CASE when ColB = 'March' THEN (Select ColA From yourtable where ColB = 'January') END     
from yourtable 

0
投票

我认为你最好通过自我加入服务:

SELECT a.b Month1 ,b.b Month2
FROM Table1 a
LEFT JOIN Table1 b
 ON a.a = b.a+2

但是:Kua zxsw指出

这适用于所有月份,但您可以将其限制为您的示例:

SQL Fiddle

0
投票

你很接近,可以这样做(但这将返回9个空行和一个有效行)

SELECT b.a
FROM Table1 a
LEFT JOIN Table1 b
 ON a.a = b.a+2
WHERE a. = 'March'

或者可以在没有SELECT CASE WHEN ColB = 'March' THEN (Select ColA FROM tablename WHERE ColB = 'January') END FROM tablename 的情况下完成

CASE

查看第二次运行SELECT (SELECT colA FROM tablename WHERE colB = 'January') FROM tablename WHERE colB = 'March' 的示例


0
投票

听起来你想要一个通用的解决方案。不幸的是,存储月份名称并不是很有效。但你可以通过自我加入来做到这一点:

here
© www.soinside.com 2019 - 2024. All rights reserved.