当相关子查询不起作用时,压缩子查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当相关子查询不起作用时,压缩子查询相关的知识,希望对你有一定的参考价值。

我在这里有冗长的子查询。有没有办法压缩这个?

SELECT 
      Count(TicketNbr) AS [Tickets Entered]

      -- SUBQUERY HERE
      ,     (SELECT AVG(hours_actual)
            FROM dbo.Service
            WHERE
            [company_name] LIKE 'XYZ'
            AND [status_description] NOT IN ('>Cancelled', 'Duplicate')
            AND hours_actual >= 0.1
            )

      FROM dbo.Service
      WHERE 
      [company_name] LIKE 'XYZ'
      AND [status_description] NOT IN ('>Cancelled', 'Duplicate')

我尝试使用相关子查询,但这要求TicketNbr在外部查询中进行GROUPed。我不希望这样。

这不起作用。

SELECT 
      Count(TicketNbr) AS [Tickets Entered]

      -- SUBQUERY HERE
      ,     (SELECT AVG(hours_actual)
            FROM dbo.Service AS [Y]
            WHERE Y.TicketNbr = X.TicketNbr
            AND Y.hours_actual >= 0.1

            )

      FROM dbo.Service AS [X]
      WHERE 
      [company_name] LIKE 'XYZ'
      AND [status_description] NOT IN ('>Cancelled', 'Duplicate')
答案

您可以使用简单的case表达式执行相同的操作:

SELECT   Count(TicketNbr) AS [Tickets Entered]
,        AVG(CASE WHEN hours_actual >= 0.1 THEN hours_actual END)
FROM dbo.Service AS [X]
WHERE [company_name] LIKE 'XYZ'
  AND [status_description] NOT IN ('>Cancelled', 'Duplicate') 

以上是关于当相关子查询不起作用时,压缩子查询的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 联合上的相关子查询不起作用

BigQuery - 相关子查询取消嵌套数组不起作用

使用子查询更新在雪花中不起作用

子查询中的子查询在配置单元中不起作用

Firebase 查询子键中的时间戳不起作用

子查询不起作用