根据特定条件在Oracle SQL数据库中添加值

问题描述:

我非常难以找到遇到的问题,并且无法找到答案。根据特定条件在Oracle SQL数据库中添加值

我有两个表,一个名为LEDGER,另一个名为WORKER。 LEDGER包含提供个人姓名,项目,日期和总金额的交易。 WORKER仅包含人员名称。

我试图写一个查询,将通过LEDGER和WORKER(使用equi-join)并找到工作人员在LEDGER中进行购买并输出结果的实例。这基本部分是容易的,我已经写了一个查询它:

SELECT WORKER.NAME, 
LEDGER.ITEM, 
LEDGER.AMOUNT 
FROM LEDGER, WORKER 
WHERE WORKER.NAME = LEDGER.PERSON 
    AND LEDGER.ACTION = 'BOUGHT' 
GROUP BY WORKER.NAME, LEDGER.ITEM, LEDGER.AMOUNT 
ORDER BY WORKER.NAME ASC; 

我有是有所有项目的总和挣扎部分出现,而不是满足这些条件的列表交易。例如,我的输出是:

NAME    ITEM  AMOUNT 
ANDREW DYE   COLT  9 
ANDREW DYE   COLT  10 
ANDREW DYE   HAY  5 
ANDREW DYE   HAY  20 
ANDREW DYE   LINE  0.75 
ANDREW DYE   PIG  2 
HELEN BRANDT  BEEF  7.5 
PETER LAWSON  BEEF  6.5 
VICTORIA LYNN  BEEF  6.9 

取而代之的是,我只想要总金额在一排结合所有项目金额,这样的:

NAME    TOTAL_AMOUNT 
ANDREW DYE   46.75 
HELEN BRANDT  7.5 
PETER LAWSON  6.5 
VICTORIA LYNN  6.9 

我希望这个问题是有道理的,并非常感谢任何答案。

+1

我删除了mysql和sql-server标签,因为这个问题是关于Oracle的。 –

+1

'item'值来自您想要的结果?如果总数是所有项目,为什么包括一个特定项目? –

+0

对不起,关于标签,感谢您的修复。对于混淆抱歉,最终查询应该只显示NAME和AMOUNT(总金额真的)。我将编辑该问题。 – dmcmulle

SELECT WORKER.NAME, 
MAX(LEDGER.ITEM), 
SUM(LEDGER.AMOUNT) 
FROM LEDGER, WORKER 
WHERE WORKER.NAME = LEDGER.PERSON 
    AND LEDGER.ACTION = 'BOUGHT' 
GROUP BY WORKER.NAME 
ORDER BY WORKER.NAME ASC; 
+0

谢谢,这工作很好! – dmcmulle

+0

@ user2669843很高兴为您效劳!接受答案,是表达谢意的好方法! –

+0

完成!谢谢 :) – dmcmulle