我正在使用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}},Comment
和SUM
,但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
答案 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),除非你的数据库有一个组函数来完成这个技巧。