用于从多个表增加多个 case 函数的 SQL 语句

标签 sql sql-server t-sql case

我试图通过制作 1 个 case 语句来增加 SQL 生成的列“Counter”。 我在案例声明中收到计数器的错误“无效列”。如有任何帮助,我们将不胜感激。

SELECT 0 as Counter(Not part of any table),
CASE
          WHEN dateadd(HOUR, -1,GETDATE()) >= max (a.UPDATED_DATE)
          THEN
             Counter + 1 
WHEN dateadd(HOUR, -1,GETDATE()) >= max (b.UPDATED_DATE)
          THEN
             Counter + 1          
          ELSE
             Counter + 0
       END  as Counter
FROM dbo.My_Dates a, Client_Dates b

最佳答案

在黑暗中拍摄。目前尚不清楚您需要按什么顺序对行进行计数,也不清楚两个表之间的关系是什么。

with m as (
    SELECT *,
        case when max(a.UPDATED_DATE) over () >    max(b.UPDATED_DATE) over ()
             then max(a.UPDATED_DATE) over () else max(b.UPDATED_DATE) over () end as last_update
    FROM dbo.My_Dates a, Client_Dates b /* this cross join surely isn't right */
)
select
    count(case when dateadd(hour, -1, getdate()) >= last_update then 1 end)
        over (order by ??)
from m;

根据下面的评论,您似乎只需要计算一堆表中的最大值:

with d(last_updated) as (
    select max(UPDATED_DATE) from T1  union all
    select max(UPDATED_DATE) from T2  union all ...
    select max(UPDATED_DATE) from T16
)
select count(case when dateadd(hour, -1, getdate()) >= last_update then 1 end) from d;

关于用于从多个表增加多个 case 函数的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69712874/

相关文章:

PHP MySQLi fatal error : Call to a member function fetch_array() on a non-object in

sql - 检查重叠日期(vb.net)

c# - 如果表存在,则返回 bool 值的 SQL Server 存储过程,c# 实现

基于多个子表行的 SQL 更新父表字段,每个子行都有长度要求

sql - 有没有安全的方法来转换 SQL 日期时间?

sql - ORDER BY 取决于两个日期列

java - Android 应用程序建立与服务器的连接?

.net - CRUD 应用程序日志记录

sql - 从 sql 查询中排除所有结果的有效方法是什么?

sql-server - SSMS/SSRS - 从查询中获取 SSRS 数据集使用的存储过程名称