如果在intebase的group by子句中不支持大小写,那么如何按案例的结果进行分组

时间:2014-11-28 15:21:19

标签: sql interbase

我尝试过使用列别名,列号,使用组中的case语句,没有运气。这是interbase的缺点吗?

select case when vp.preferredvendor = 'Y' then vp.name else 'Misc' end as vendor, sum(sa.totalfare) from SalesActivity(1,1,2, '2014-01-01', '2014-02-01') sa join booking bk on bk.bookingno = sa.bookingno join profile vp on bk.vendor_linkno = vp.profileno group by vendor

2 个答案:

答案 0 :(得分:1)

重复case

select (case when vp.preferredvendor = 'Y' then vp.name
             else 'Misc'
        end) as vendor,
       sum(sa.totalfare)
from SalesActivity(1,1,2, '2014-01-01', '2014-02-01') sa join
     booking bk
     on bk.bookingno = sa.bookingno join
     profile vp
     on bk.vendor_linkno = vp.profileno
group by (case when vp.preferredvendor = 'Y' then vp.name
               else 'Misc'
          end);

作为旁注,一些数据库确实允许在group by子句中使用列别名,但绝对不是所有这些都是标准所必需的。

答案 1 :(得分:0)

我对Interbase不熟悉,但考虑到你尝试过的失败,下一步就是尝试子查询:

select vendor, sum(totalfare)
from (
   select
     case
       when vp.preferredvendor = 'Y' then vp.name
       else 'Misc'
     end as vendor,
     sa.totalfare
   from
     SalesActivity(1,1,2, '2014-01-01', '2014-02-01') sa
   join
     booking bk on bk.bookingno = sa.bookingno
   join
     profile vp on bk.vendor_linkno = vp.profileno)
group by vendor