产品的总和数量

时间:2018-06-08 12:48:57

标签: sql oracle

我试图总结特定数量的产品,但在我的代码中,当我总结时,它需要我在表中的所有数量并带来全部数量的所有产品。这是结果的例子......

CÓDIGO  QTD
288     1,153
63064   1,153
28229   1,153

应该是例如:

CÓDIGO  QTD
288     12
63064   9
28229   231

这是我的代码:

SELECT
   substr(ML.msg, (instr(ML.msg, ' ', 1, 3) + 1), (instr(ML.msg, ' ', 1, 4) - 1) - instr(ML.msg, ' ', 1, 3)) Código,
   (SELECT
            SUM(to_number(substr(ML.msg, -9))) soma
        FROM Msg_log ML,
            item_cbo IC
        WHERE TRUNC(ML.create_date_time) = TRUNC(current_date)
        AND IC.Item_name = substr(ML.msg, (instr(ML.msg, ' ', 1, 3) + 1), (instr(ML.msg, ' ', 1, 4) - 1) - instr(ML.msg, ' ', 1, 3))
        AND ((ML.msg_id = 1053
        AND ML.module = 'WAVE')
        OR (ML.msg_id = 1054
        AND ML.module = 'WAVE')))
    qtd
FROM Msg_log ML,
    item_cbo IC   
WHERE TRUNC(ML.create_date_time) = TRUNC(current_date)
AND ((ML.msg_id = 1053
AND ML.module = 'WAVE')
OR (ML.msg_id = 1054
AND ML.module = 'WAVE'))

2 个答案:

答案 0 :(得分:0)

你有几个问题 - 除了需要group by之外,你的子查询也会重复外部查询的逻辑。更重要的是,您的外部查询似乎在Msg_Log和item_cbo之间进行笛卡尔(交叉)连接 - 它将连接起来,没有条件。如果item_cbo中有超过1行,您可能会得到比您想要的更多结果。

如果没有任何表格数据,我有点猜测,但我会像这样重写:

SELECT
   substr(ML.msg, (instr(ML.msg, ' ', 1, 3) + 1), (instr(ML.msg, ' ', 1, 4) - 1) - instr(ML.msg, ' ', 1, 3)) Código,
   SUM(to_number(substr(ML.msg, -9))) qtd
FROM Msg_log ML,
    item_cbo IC
WHERE TRUNC(ML.create_date_time) = TRUNC(current_date)
AND ((ML.msg_id = 1053
AND ML.module = 'WAVE')
OR (ML.msg_id = 1054
AND ML.module = 'WAVE'))
AND IC.Item_name = substr(ML.msg, (instr(ML.msg, ' ', 1, 3) + 1), (instr(ML.msg, ' ', 1, 4) - 1) - instr(ML.msg, ' ', 1, 3))
GROUP BY substr(ML.msg, (instr(ML.msg, ' ', 1, 3) + 1), (instr(ML.msg, ' ', 1, 4) - 1) - instr(ML.msg, ' ', 1, 3));

实际上,等等,不 - 为了清晰和可读性,我想我宁愿这样写:

SELECT Código, sum(qtd) as qtd
FROM (SELECT
           substr(ML.msg, (instr(ML.msg, ' ', 1, 3) + 1), (instr(ML.msg, ' ', 1, 4) - 1) - instr(ML.msg, ' ', 1, 3)) Código,
           to_number(substr(ML.msg, -9)) qtd
        FROM Msg_log ML
        WHERE TRUNC(ML.create_date_time) = TRUNC(current_date)
        AND ((ML.msg_id = 1053
        AND ML.module = 'WAVE')
        OR (ML.msg_id = 1054
        AND ML.module = 'WAVE'))
) ML
INNER JOIN item_cbo IC
    ON IC.Item_name = ML.Código
GROUP BY Código;

我猜测你实际上并没有使用item_cbo并且你可以完全删除它,但是我把它留下了,因为也许你正在使用它来过滤你的结果。< / p>

答案 1 :(得分:0)

我建议清理查询。我认为这就是你要做的事情:

header#masthead {
background-color: #5caf50;
height: 200px;
z-index: 0;
}

#page-sub-header {
top: 100px;
padding-top: 10px;
background: transparent !important;
}

#page-sub-header .container {
box-shadow: 0 5px 10px rgba(0,0,0,0.19);
background-color: #fff;
border-width: 1px;
border-style: solid;
border-color: #ddd;
margin-bottom: 50px;
overflow: auto;
height: 200px;
}

#page-sub-header .container h1 {
color: rgba(102,187,106,0.85);
text-shadow: 1px 4px 6px #fff, 0 0 0 #000, 1px 4px 6px #fff;
}

ul.navbar-nav {
background-color: #333;
}
相关问题