Case 语句中的 select 语句
Posted
技术标签:
【中文标题】Case 语句中的 select 语句【英文标题】:select statement in a Case statement 【发布时间】:2020-09-29 19:14:41 【问题描述】:我想针对 CASE 中的条件编写一个 select 语句。例如,如果(今天是工作日)则 x 否则 y
我在流分析查询中写了以下语句
SELECT
CASE
WHEN DATEPART(WEEKDAY, EventTime) in (1,7) THEN SELECT count(*) as Eventcount
INTO output
FROM Input
Group By tumblingwindow(minute,5)
Having Count(*) < 10
ELSE SELECT count(*) as Eventcount
INTO output
FROM Input
Group By tumblingwindow(minute,5)
Having Count(*) > 10
END as DayStatus
INTO Output1
FROM Input
我也尝试过以下查询,但仍然无法正常工作 选择( 案子 WHEN DATEPART(WEEKDAY, EventTime) in (1,7) THEN ( 选择计数()作为事件计数 INTO电子邮件AD输出事件棱镜 来自 IE_Eprism 按翻滚窗口分组(分钟,5) 计数() > 10 ) 其他“工作日” END ) 作为 DayStatus
FROM IE_Date
我收到上述声明的错误。 我怎样才能做到这一点? 提前谢谢你。
【问题讨论】:
如果只有两个条件,那么您可以在同一个 ASA 作业中有 2 个独立的查询。这行得通吗? 感谢@SidRamadoss,我现在正在尝试相同的方法。但这种方法的缺点是我们必须创建 2 个不同的输出(使用更多资源)。即使在我的情况下使用这种方法,它仍然没有给我想要的输出。它没有给出任何错误,但效果不佳。对于工作日我尝试 SELECT count(*) as Eventcount INTO Output FROM Input where DATEPART(WEEKDAY, EventTime) in (1,7) Group By tumblingwindow(minute,5) 给我 0 这是不正确的 您可以在两个查询中使用相同的输出资源。我建议您尝试使用 Visual Studio Code 使用来自云的输入流在您的设备上本地测试您的查询 -docs.microsoft.com/en-us/azure/stream-analytics/… 这将允许您更有效地调试查询。您将确切知道您的查询会产生什么结果。 谢谢@SidRamadoss,我会尝试调试 【参考方案1】:在 SQL 中,不能根据 SELECT 子句中的条件选择整个行集。 组合相似的计算可以通过分解出常见的表达式部分或通过编写单独的查询并使用 UNION 或 JOIN 将结果组合到单个输出中来完成。
在问题优先的方法中查看特定查询是一种更简单的方法:
WITH agg AS (
SELECT [day] = DATEPART(WEEKDAY, EventTime),
count = Count(*)
FROM Input
GROUP BY TumblingWindow(minute,5)
)
SELECT count
FROM agg
WHERE CASE WHEN [day] in (1,7) and count < 10 THEN 1
WHEN [day] in (2,3,4,5,6) and count > 10 THEN 1
ELSE 0
END = 1
【讨论】:
抱歉,忘记从原始查询中复制 GROUP BY。更新了...以上是关于Case 语句中的 select 语句的主要内容,如果未能解决你的问题,请参考以下文章
Select 语句中的 Case 语句中的 Exists 函数需要 FOREVER