Sql 对CASE语句使用where条件

Sql 对CASE语句使用where条件,sql,oracle,Sql,Oracle,我有以下格式的SQL语句: SELECT p.env, p.name, i.sys_name, i.hostname, CASE WHEN (COUNT(DISTINCT p.env) OVER (PARTITION BY i.sys_name) + COUNT(DISTINCT i.sys_name) OVER (PARTITION BY i.sys_name)) = 2 THEN 'no issues'

我有以下格式的SQL语句:

SELECT 
    p.env, p.name, i.sys_name, i.hostname,
    CASE
       WHEN (COUNT(DISTINCT p.env) OVER (PARTITION BY i.sys_name) +
             COUNT(DISTINCT i.sys_name) OVER (PARTITION BY i.sys_name)) = 2
          THEN 'no issues'
          ELSE 'has issues'
    END AS result
FROM 
    instances i 
JOIN 
    properties p ON i.target_name = p.target_name
如何添加where条件,以便仅获取结果为“has issues”的行


谢谢。

一个明显的解决方案是子查询:

SELECT *
FROM (SELECT p.env, p.name, i.sys_name, i.hostname,
             (CASE WHEN (COUNT(DISTINCT p.env) OVER (PARTITION BY i.sys_name) +
                         COUNT(DISTINCT i.sys_name) OVER (PARTITION BY i.sys_name)
                        ) = 2
                  THEN 'no issues' ELSE 'has issues'
               END) AS result
      FROM instances i JOIN
           properties p
           ON i.target_name = p.target_name
     ) ip
WHERE result = 'has issues';

一个明显的解决方案是子查询:

SELECT *
FROM (SELECT p.env, p.name, i.sys_name, i.hostname,
             (CASE WHEN (COUNT(DISTINCT p.env) OVER (PARTITION BY i.sys_name) +
                         COUNT(DISTINCT i.sys_name) OVER (PARTITION BY i.sys_name)
                        ) = 2
                  THEN 'no issues' ELSE 'has issues'
               END) AS result
      FROM instances i JOIN
           properties p
           ON i.target_name = p.target_name
     ) ip
WHERE result = 'has issues';

请提供示例数据和所需结果。您的代码肯定有问题(意思是:无论它应该解决什么问题,此代码很可能是错误的解决方案)。在按i.sys\u名称分区后,有一个与i.sys\u名称不同的计数。这毫无意义;在每个单独的分区中,计数正好是1。(i.sys_name为空时除外,在这种情况下,计数为零。)因此。。。如果您告诉我们您正在尝试做什么,而不是您认为应该如何做,也许我们可以更好地帮助您。请提供示例数据和期望的结果。您的代码肯定有问题(意思是:无论它应该解决什么问题,此代码都很可能是错误的解决方案)。在按i.sys\u名称分区后,有一个与i.sys\u名称不同的计数。这毫无意义;在每个单独的分区中,计数正好是1。(i.sys_name为空时除外,在这种情况下,计数为零。)因此。。。如果你告诉我们你想做什么,而不是你认为应该怎么做,也许我们可以更好地帮助你。