用于从多个表中增加多个 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 语句的主要内容,如果未能解决你的问题,请参考以下文章