Oracle 一列计算多个输出
我已经根据年初至今、季度至今和月至今显示了产品总销售额。问题是我必须只展示其中的一个。在选择的基础上,只能看到一个输出,即我们有单选按钮从多个中选择一个。这里还提供了一个要选择的输入,并根据该输入生成输出。输入可以是任何YTD、QTD或MTD。输出是根据输入生成的。我不知道如何计算输入可以变化的列输出。 我有一张产品表-Oracle 一列计算多个输出,oracle,oracle11g,Oracle,Oracle11g,我已经根据年初至今、季度至今和月至今显示了产品总销售额。问题是我必须只展示其中的一个。在选择的基础上,只能看到一个输出,即我们有单选按钮从多个中选择一个。这里还提供了一个要选择的输入,并根据该输入生成输出。输入可以是任何YTD、QTD或MTD。输出是根据输入生成的。我不知道如何计算输入可以变化的列输出。 我有一张产品表- Product_ID Product_name Price 1 Mobile 200
Product_ID Product_name Price
1 Mobile 200
2 T.V. 400
3 Mixer 300
我有一张这样的销售表-
Product_ID Sales_Date Quantity
1 01-01-2015 30
2 03-01-2015 40
3 06-02-2015 10
1 22-03-2015 30
2 09-04-2015 10
3 21-05-2015 40
1 04-06-2015 40
2 29-07-2015 30
1 31-08-2015 30
3 14-09-2015 30
“我的输出”列包含以下3列:-
产品标识、产品名称和总金额
。
列Total_Amount(数量*价格)必须根据用户提供的输入计算销售额,即:
IF it is YTD then it should calculate the total sale from Starting Date of Year ( 01-01-2015) to the current_date(sysdate),
IF it is QTD then in which quarter the current date is falling i.e if current month is september then from 1 July to current_date(sysdate),
IF it is MTD then in which month the current date is falling to the current_date(sysdate).
有人能帮忙吗。谢谢 我的假设是,您有3个单选按钮(在我的示例中为变量:YTD、:QTD、:MTD),其中用户一次只能选择一个值,其余值将为空 您可以使用类似这样的工具来获得您想要的:
select SUM(a.QTY*B.PRICE) from PRODUCTS a
inner join SALES B on a.PRODUCT_ID=B.PRODUCT_ID
where
(:YTD is null or B.SALES_DATE between '01-JAN-15' and sysdate)
and
(:QTD is null or TO_CHAR(B.SALES_DATE, 'YYYY-Q')=TO_CHAR(sysdate, 'YYYY-Q'))
and
(:MTD is null or TO_CHAR(B.SALES_DATE, 'MM')=TO_CHAR(sysdate, 'MM'));
您可以在此处进行测试您的查询将为所有3项提供相同的结果:(同时,我的数量包含在销售表中,价格包含在产品表中。请在上面创建表格和数据,以便我可以更正脚本。对不起,伙计。我尝试过,但我无法创建它总是抛出错误。我不知道为什么我没有任何错误。你可以测试它如何计算应该给出qtd、ytd或mtd的产品…我知道了吗s给出所有查询的结果并没有询问应该计算哪个product_id:(它只是calculatesorry,我忘了加入product;脚本已经修改,加上与price的乘法已经添加
-- step 1
create or replace view my_admin
as
select 'YTD' element, product_id, sum(quantity) sum_quantity
from sales
where Sales_date between trunc(sysdate,'Y') and sysdate
group by product_id
union
select 'QTD', product_id, sum(quantity) sum_quantity
from sales
where Sales_date between trunc(sysdate,'Q') and sysdate
group by product_id
union
select 'MTD', product_id, sum(quantity) sum_quantity
from sales
where Sales_date between trunc(sysdate,'MM') and sysdate
group by product_id
-- step 2
select element, p.product_name, (sum_quantity * p.PRICE) agregate
from my_admin a
inner join products p on a.product_id = p.product_id
where element = (:input)