【问题标题】:Error in sql query when using contains in aggregate expression在聚合表达式中使用包含时 sql 查询出错
【发布时间】:2013-06-05 18:44:00
【问题描述】:

查询:

    SELECT
        c,

        COUNT
        (   WHEN a='11' AND contains(b,'aa') THEN 1 ELSE NULL END
        ) as total
    from x
group by c

错误:

全文谓词不能出现在聚合表达式中。地方 子查询中的聚合表达式。

我使用包含是因为它在文本中搜索时使用索引,而且查询也只是这样,所以我只能将它放在聚合表达式中......请建议......

【问题讨论】:

  • 为什么你认为仍然需要 COUNT?
  • 是的,因为在我的原始查询中,我有 group by 子句...
  • 所以添加完整的查询和预期的结果。不要提供部分信息,尤其是当 SQL Server 只允许在 WHERE 中包含 CONTAINS 时

标签: sql sql-server-2008 aggregate-functions contains


【解决方案1】:

CONTAINS 只能出现在 WHERE 子句中

SELECT
    c,
    COUNT(ContainsResult) AS total
FROM
    (    
    SELECT
        c, CASE WHEN a='11' THEN 1 ELSE NULL END AS ContainsResult
    from
        x
    WHERE
        contains(b,'aa')
    UNION ALL
    SELECT
        c, NULL
    from
        x
    WHERE
        NOT contains(b,'aa')
    ) X1
GROUP BY 
    c

【讨论】:

    【解决方案2】:

    试试这个 -

    SELECT total = COUNT(
        CASE WHEN a = '11' 
              AND CONTAINS(b, 'aa') THEN 1 
        END)
    FROM x
    

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多