Sql 如果intebase中的group by子句不支持case,如何根据案例的结果进行分组
我尝试过使用columns别名column number,在group by中使用case语句,但没有成功。这是interbase的一个缺点吗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上
选择
案例
当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的一个不好的限制。