【发布时间】:2017-08-15 07:12:50
【问题描述】:
在 Microsoft SQL Server 中使用 SQL,我有一个非常具体的问题,我在比较两个月之间的数据。该数据可以具有两种状态之一——为了简单起见,它可以是“1”或“0”,或者基本上是“是”或“否”。
我想考虑以下场景:
- 如果某行在一个月内的状态为“1”,然后在下个月变为“0”,反之亦然
- 如果状态从一个月到另一个月没有变化(即“1”到“1”或“0”到“0”)
- 如果状态值在上个月为空,下个月变为“1”或“0”
我假设我可以为此使用多个 CASE 语句。此外,由于我要一起检查这两个月,我似乎无法将其他场景编码到我的 SQL 中。
我正在尝试找到某种方法将所有 CASE 语句压缩为仅生成一个额外的列,而我遇到的另一个问题是第三个 CASE 语句在第一个“IN”处引发语法错误。希望这对某人有意义,并提前感谢您提供的任何意见或提示。
【问题讨论】:
-
如果您提供了示例数据,它会更容易提供帮助。但我猜你可能想获取最新数据(例如
select top 1 status from mytable t order by date desc)并交叉应用/加入上个月的数据(例如cross apply (select top 1 status from mytable where date < dateadd(month, 0, datediff(month, 0, t.date)) order by date desc) as c)或类似的东西?然后在单个 case 语句中对 t.status 和 c.status 进行比较?
标签: sql sql-server compare case