Sql 对CASE语句使用where条件
我有以下格式的SQL语句: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'
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为空时除外,在这种情况下,计数为零。)因此。。。如果你告诉我们你想做什么,而不是你认为应该怎么做,也许我们可以更好地帮助你。