Sql 如果intebase中的group by子句不支持case,如何根据案例的结果进行分组

Sql 如果intebase中的group by子句不支持case,如何根据案例的结果进行分组,sql,interbase,Sql,Interbase,我尝试过使用columns别名column number,在group by中使用case语句,但没有成功。这是interbase的一个缺点吗 选择 案例 当vp.preferredvendor='Y'时,则为vp.name 其他“杂项” 作为供应商结束, 总和(总票价) 从…起 销售活动(1,1,2,'2014-01-01,'2014-02-01')sa 参加 在bk上预订bk.bookingno=sa.bookingno 参加 bk.vendor\u linkno=vp.profileno上

我尝试过使用columns别名column number,在group by中使用case语句,但没有成功。这是interbase的一个缺点吗

选择
案例
当vp.preferredvendor='Y'时,则为vp.name
其他“杂项”
作为供应商结束,
总和(总票价)
从…起
销售活动(1,1,2,'2014-01-01,'2014-02-01')sa
参加
在bk上预订bk.bookingno=sa.bookingno
参加
bk.vendor\u linkno=vp.profileno上的配置文件vp
分组

供应商

重复
案例

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
子句中使用列别名,但肯定不是所有的列别名,而且这绝对不是标准所要求的。

我不熟悉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

向我们显示您尝试的所有查询(您提到了三个,但只显示了一个)以及您收到的每个查询的实际错误消息将非常有帮助。它返回一个sql错误,表示group by之后有一个无效令牌。Sory interbase不支持该组中陈述的部分案例。@wizhippo。是否允许执行
按供应商分组
或使用子查询?不支持
按供应商分组
或子查询。我能做的最好的事情就是使用一个视图,然后使用该视图进行分组。似乎是interbase的一个不好的限制。