比较表中的列,仅显示差异

时间:2014-05-07 15:26:43

标签: sql database oracle

我在同一张表中有两列我想要比较。问题在于它们不必相同而被视为“相同”。下面我将尝试用一个例子来解释。

示例:

HOST_NAME     ENVIRONMENT                  SUBNET_ENVIRONMENT
host1         Production                   Prod
host2         Development(Dev)/Testing     Non-Prod
host3         Development(Dev)             Prod
host4         Production                   Non-Prod
host5         Testing/UAT                  Prod
host6         DR                           Prod

基本上,如果“SUBNET_ENVIRONMENT”是Prod,环境也应该是“生产”。如果“SUBNET_ENVIRONMENT”是非产品,则环境应该是除“生产”之外的任何东西。

在这个例子中,前两个将(host1和host2)被认为是正确的,因此被排除在结果之外。以下4(主机{3-6})是“不同的”,因此这些是我想要在查询结果中显示的那些。

下面是我如何获得整个结果集的示例查询。如何修改此项以仅显示差异?

SELECT
   HOST_NAME,
   REPLACE(HOST_ENVIRONMENT,',','/') HOST_ENV,
   HOST_SUBNET_ENV
FROM 
   HOST_TABLE

1 个答案:

答案 0 :(得分:1)

应该像OR一样简单:

SELECT
   HOST_NAME,
   REPLACE(HOST_ENVIRONMENT,',','/') HOST_ENV,
   HOST_SUBNET_ENV
FROM 
   HOST_TABLE
WHERE (SUBNET_ENVIRONMENT = 'Prod' AND ENVIRONMENT <> 'Production')
OR (SUBNET_ENVIRONMENT = 'Non-Prod' AND ENVIRONMENT = 'Production')