SQL,仅将某些结果组合在一起

时间:2015-12-29 18:07:22

标签: sql oracle

使用此查询...

SELECT
    im.spl_instr_code_1 as LW,
    sum(pt.nbr_units/im.std_sub_pack_qty) as "Received Units"
FROM
    prod_trkg_tran pt,
    item_master im,
    po_hdr po
WHERE
    pt.sku_id = im.sku_id AND
    pt.ref_field_2 = po.po_nbr AND
    po.ref_field_2='N' AND
    pt.create_date_time BETWEEN to_date('2015-12-29 06:00:00','yyyy-mm-dd hh24:mi:ss') AND to_date('2015-12-29 14:30:00','yyyy-mm-dd hh24:mi:ss') AND
    pt.module_name = 'Receiving' 
GROUP BY
    im.spl_instr_code_1

我得到这样的结果......

LW   Received Units
==   ==============
10   6150 
20   3206 
25   1981 
30   15207 
55   11618 
56   10077

我如何更加分组已经分组的一些结果? 示例...让我们假设我想将最后3个结果组合在一起以获得这样的最终结果...

LW          Received Units
==          ==============
10          6150 
20          3206 
25          1981 
NEW_GROUP   36902 

2 个答案:

答案 0 :(得分:1)

我已经习惯了SQL服务器,但这应该适合你:

SELECT CASE WHEN im.spl_instr_code_1 < 30 
        THEN im.spli_instr_code_1 
    ELSE    'New_Group' 
    END AS LW
im.spl_instr_code_1 as LW, 
SUM(pt.nbr_units/im.std_sub_pack_qty) AS "Received Units"
FROM prod_trkg_tran pt, item_master im, po_hdr po
WHERE pt.sku_id = im.sku_id 
AND pt.ref_field_2 = po.po_nbr 
AND po.ref_field_2='N'
AND pt.create_date_time between to_date('2015-12-29 06:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2015-12-29 14:30:00','yyyy-mm-dd hh24:mi:ss')
AND pt.module_name = 'Receiving' 
GROUP BY 
    CASE WHEN im.spl_instr_code_1 < 30 
        THEN im.spli_instr_code_1 
        ELSE 'New_Group' 
    END

case语句表示当其值小于30时使用“im.spl_instr_code_1”。如果它大于或等于30,则使用“New_Group”。您可以根据需要修改案例逻辑,并根据需要使其变得复杂。

你可以在0到30,31-60,超过60等等之间有一个案例。只需记住在select语句中使用SAME逻辑作为group by子句,你应该没问题。

答案 1 :(得分:0)

在oracle中,您可以使用CTE并在其上构建查询。像下面的东西。如果要添加更多组,可以使用具有相应$(document).on('click', '.imageSelected', function () { $(this).remove(); }); 子句的后续union。对于where,这应该有用。

>30