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

Posted

技术标签:

【中文标题】用于从多个表中增加多个 case 函数的 SQL 语句【英文标题】:SQL statement to increment multiple case functions from multiple tables 【发布时间】:2021-12-11 05:21:05 【问题描述】:

我正在尝试通过创建 1 个 case 语句来增加 SQL 生成的列“Counter”。 在我的案例陈述中,我收到了 Counter 的错误“Invalid Column”。任何帮助表示赞赏。

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

【问题讨论】:

您不能在同一范围内通过别名引用列。此外,它是一个CASE 表达式。虽然如果我说实话,这里的描述毫无意义。 不要使用old-style joins。 ...或meaningless aliases。 【参考方案1】:

在黑暗中拍摄。不清楚你需要按什么顺序来计算行数或者两个表之间的关系是什么。

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;

【讨论】:

嘿@shawnt00,基本上我需要计算过去 4 小时内更新日期未更新的 16 个表中有多少个表。所以我在想如果我只是在所有 16 个上做一个案例来增加它会起作用的计数器。所以我认为我不需要执行任何连接。 @Christopher 不,您绝对不想尝试使用 16 个表进行交叉连接。连接仍然以笛卡尔积的形式存在,这基本上会使您的服务器崩溃。

以上是关于用于从多个表中增加多个 case 函数的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

用于从多个表中检索数据的 Sql 查询

如何用标准SQL语句给一张表中添加多个字段

SQL 从多个表中选择返回可用的内容

用于从多个表中查找具有表名的所有记录的 SQL 查询

SQL - 如何从多个可能的列名中进行选择?

Excel - UDF 函数,用于根据条件从多个工作表中获取 SUM 值