2017-09-11 49 views
1

我有一个查询返回8列,其中2个查询返回最大日期。我想创建第9列,它将返回一个数字,星号或其他内容以突出显示第1列中的日期大于第2列中的行但仍保留所有行的行。以某种方式可能吗?子查询值大于另一个子查询值

编辑: 这是查询 我希望看到的差异的列MaxExpDateGB和MaxExpDatePH

select 
i.ITEM, 
i.COMPANY, 
count(distinct i.LOGISTICS_UNIT) as LocationsGB, 
sum(on_hand_qty) as StockGB, 
(select 
Count(distinct location) 
from 
LOCATION_INVENTORY b where b.ITEM = i.ITEM and b.TEMPLATE_FIELD1 = '139' and b.TEMPLATE_FIELD4 is not null and b.TEMPLATE_FIELD5 is null) as LocationsPH, 
(select 
sum(on_hand_qty) 
from 
LOCATION_INVENTORY b where b.ITEM = i.ITEM and b.TEMPLATE_FIELD1 = '139' and b.TEMPLATE_FIELD4 is not null and b.TEMPLATE_FIELD5 is null) as StockPH, 
MAX(i.Expiration_DATE) as MaxExpDateGB, 
(select 
MAX(a.Expiration_DATE) 
from 
LOCATION_INVENTORY a where a.ITEM = i.ITEM and a.TEMPLATE_FIELD1 = '139' and a.TEMPLATE_FIELD4 is not null and a.INVENTORY_STS = 'available') as MaxExpDatePH 
from 
LOCATION l inner join LOCATION_INVENTORY i on l.LOCATION = i.LOCATION inner join ITEM t on i.ITEM = t.ITEM 
where 
t.USER_DEF6 = '10' 
and i.LOCATION = '000-gb-01' 
group by 
i.item,i.company 
+1

是的,它是可能的。您今天可以在大多数DBMS系统中使用案例表达式。 –

+0

我删除了不兼容的数据库标签。你的问题的答案是“是的,这是可能的,不知何故”。除此之外不可能再添加,因为你的问题缺乏相关信息。 –

+0

显示您的查询,我们可以帮助更轻松。并且请将您的请求标记为您正在使用的DBMS(PostgreSQL,Oracle,...)。 –

回答

1

没有任何重构

select *, case when LocationsPH > StockPH then '*' end flag 
from (
    select 
     i.ITEM, 
     i.COMPANY, 
     count(distinct i.LOGISTICS_UNIT) as LocationsGB, 
     sum(on_hand_qty) as StockGB, 
     (select 
      Count(distinct location) 
      from 
      LOCATION_INVENTORY b where b.ITEM = i.ITEM and b.TEMPLATE_FIELD1 = '139' and b.TEMPLATE_FIELD4 is not null and b.TEMPLATE_FIELD5 is null 
     ) as LocationsPH, 
     (select 
      sum(on_hand_qty) 
      from 
      LOCATION_INVENTORY b where b.ITEM = i.ITEM and b.TEMPLATE_FIELD1 = '139' and b.TEMPLATE_FIELD4 is not null and b.TEMPLATE_FIELD5 is null 
     ) as StockPH, 
     MAX(i.Expiration_DATE) as MaxExpDateGB, 
     (select 
      MAX(a.Expiration_DATE) 
      from 
      LOCATION_INVENTORY a where a.ITEM = i.ITEM and a.TEMPLATE_FIELD1 = '139' and a.TEMPLATE_FIELD4 is not null and a.INVENTORY_STS = 'available' 
     ) as MaxExpDatePH 
    from 
    LOCATION l 
    inner join LOCATION_INVENTORY i on l.LOCATION = i.LOCATION inner join ITEM t on i.ITEM = t.ITEM 
    where 
    t.USER_DEF6 = '10' 
    and i.LOCATION = '000-gb-01' 
    group by 
    i.item,i.company 
) t 
+0

这样做的工作,谢谢你队友。 –