使用别名SELECT的GROUP-BY问题

时间:2014-12-15 22:36:38

标签: sql group-by aggregate-functions interbase

我正在使用InterBase并努力将我的查询放在一起。

这是我目前的查询:

SELECT a.employee_no, ea.comment, ea.status as EmpadStatus, a.advices_value
FROM advices a
JOIN EMPAD EA ON (A.CODE = EA.CODE and ea.employee_no = A.employee_no ) AND EA.SUPER_FUND_CODE NOT IN ('000038','000113', '', ' ')
JOIN ALLDED ad ON AD.CODE = EA.CODE
WHERE a.employee_no = 13844 and a.advices_date between '1.10.2014' and '31.10.2014'

我的结果是:

Employee_No   Comment   EmpadStatus   Advices_value
1             aaa       0             10.20
1                       1             30.50
1             bbb       0             69.30   

我需要做的是显示Employee_no的{​​{1}},CommentSUM,但Advices_Value必须 第一次 评论Comment

我试图使用别名,但我知道你不能通过它分组,所以这个查询不会起作用

empad.status = 0

所以我需要这样的结果:

    SELECT a.employee_no, SUM(a.advices_value), (SELECT DISTINCT ea.comment
                                                 FROM EMPAD ea
                                                 JOIN allded ad on ea.code = ad.code
                                                 WHERE ea.employee_no = a.employee_no and ea.status = 0 and ad.super_type = 1) as comment
FROM advices a
JOIN EMPAD EA ON (A.CODE = EA.CODE and ea.employee_no = A.employee_no ) AND EA.SUPER_FUND_CODE NOT IN ('000038','000113', '', ' ')
JOIN ALLDED ad ON AD.CODE = EA.CODE
WHERE a.employee_no = 13844 and a.advices_date between '1.10.2014' and '31.10.2014'
GROUP BY a.employee_no, comment

1 个答案:

答案 0 :(得分:1)

我通常在这里使用MySQL,但我相信我要说的也是申请InterBase。

你可以使用一个案例或if,如果你的数据库中存在任何一个案例,你可以使用MIN,MAX或任何其他组函数。

MIN(IF(EA.status = 0, a.comment, NULL))

MIN(CASE EA.status WHEN 0 then a.comment ELSE NULL END)

这是有效的,因为组函数忽略NULL值。

唯一的问题是,如果有一行状态= 0,那么你真的无法控制并获得第一行或最后一行(你真的无法控制订单其中行由group函数处理,除非函数本身支持ORDER BY),除非你的数据库有一个组函数来完成这个技巧。