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

在case语句中使用select语句中的参数[重复]

TRIGGER 中的 SELECT CASE 语句

SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]

Select 语句中的案例

SQL查询语句SELECT中带有case when嵌套子查询判断的问题