sql - 使用不在连接中的表中的数据时的 CASE
问题描述
我要做的是检查不同的表(在不同的服务器上)是否具有与 ETA 到期时的月份的汇率相关的数据。
这是代码:
SELECT distinct
case when month(pod_eta)>month(getdate()) AND month(max(server.database.[dbo].[CustomsExchangeRate].validto))> month(getdate()) then pod_eta
when month(pod_eta)>month(getdate()) AND month(max(server.database.[dbo].[CustomsExchangeRate].validto))= month(getdate()) THEN NULL
ELSE pod_eta end AS ArrDate from staging.dutydata i
它的逻辑是当ETA是下个月并且我们有下个月的汇率时,然后使用ETA,如果ETA是下个月并且我们有本月的汇率,则为null,否则使用pod_eta(如果ETA是这个月,我们有这个月的汇率)
MSSQL 失败,因为它无法绑定 server.database.dbo].CustomsExchangeRate].validto。
他们没有我可以用来加入他们的通用密钥...
解决方案
只需将其拉入变量即可。
DECLARE @maxMonth int;
SELECT @maxMonth = DATEPART(month,max(validto))
FROM server.database.[dbo].[CustomsExchangeRate];
SELECT distinct
case when month(pod_eta)>month(getdate()) AND @maxMonth > month(getdate()) then pod_eta
when month(pod_eta)>month(getdate()) AND @maxMonth = month(getdate()) THEN NULL
ELSE pod_eta end AS ArrDate
from staging.dutydata i;
虽然这对我来说似乎很危险。当它是 12 月并且最大有效日期是下一个 1 月时会发生什么?
推荐阅读
- c++ - 生成可能会或可能不会更新的源文件
- linker - Facebook iOS SDK 链接不需要的 AdSupport 库
- sql - 如何从 SQL Server 检索每个用户的最后一次登录?
- iis - ISAPI 过滤器修改 302 响应 - IIS 丢弃请求并放入 HTTPERR - IPv6 / HTTP2.0
- python - 更新团队权限 GitHub API
- html - 是否可以对齐
使它们均匀?
- c# - .Net 4.7.2 Sql 在长文件夹路径中导出 bak 文件
- sql - 字符串正在保存特殊字符
- java - 如何将 jar 文件安装程序转换为 Linux、Windows、MacOS 支持的文件?
- python - 类型错误:comment_detail() 缺少 2 个必需的位置参数:'request' 和 'slug'