我试图创建一个查询,它包含一个百分比。下面是表的结构:在同一个查询中获取一个条件的总数
STransaction:
TRANSACTIONID -> NUMBER(10,0)
TRANSACTIONMONTH -> VARCHAR2(10 BYTE)
CUSTOMER_CUSTOMERID -> NUMBER(8,0)
COMMERCIALDESCRIPTION -> VARCHAR2(500 BYTE)
AMOUNTTM -> NUMBER(8,2)
AMOUNTDESCRIPTION -> VARCHAR2(50 BYTE)
FOB -> NUMBER(10,2)
FOBUNIT -> NUMBER(10,2)
CFR -> NUMBER(10,2)
CFRUNIT -> NUMBER(10,2)
SUPPLIER_SUPPLIERID -> NUMBER(8,0)
BOARDINGCOUNTRY -> VARCHAR2(50 BYTE)
BOARDINDBAY -> VARCHAR2(400 BYTE)
TRANSPORTATIONVIA -> VARCHAR2(50 BYTE)
CUSTOMS -> VARCHAR2(50 BYTE)
TRANSACTIONYEAR -> VARCHAR2(4 BYTE)
TRANSACTIONDAY -> VARCHAR2(2 BYTE)
CHAPTER -> VARCHAR2(3 BYTE)
TARIFFHEADING -> NUMBER(12,0)
PRODUCTFAMILY_PRODUCTFAMILYID -> NUMBER(5,0)
客户:
CUSTOMERID -> NUMBER(8,0)
CUSTOMERNAME -> VARCHAR2(80 BYTE)
COUNTRY_COUNTRYID -> NUMBER(5,0)
ISVDT -> CHAR(1 BYTE)
供应商:
SUPPLIERID -> NUMBER(8,0)
SUPPLIERNAME -> VARCHAR2(80 BYTE)
SUPPLIERCOUNTRY -> VARCHAR2(50 BYTE)
ProductFamily:
PRODUCTFAMILYID -> NUMBER(5,0)
PRODFAMNAME -> VARCHAR2(60 BYTE)
国家:
COUNTRYID -> NUMBER(5,0)
COUNTRYNAME -> VARCHAR2(20 BYTE)
REGION_REGIONID -> NUMBER(5,0)
COUNTRYABBR -> VARCHAR2(5 BYTE)
我需要做一个表,每一年的销售获得每个客户,这是由在STRANSACTION表中的列CFR代表的百分比。在下面的代码,我有一个查询,得到每个客户的销售额每年:
SELECT cus.customername c,
SUM(CASE WHEN tran.transactionyear = 2013 THEN tran.cfr ELSE 0 END) 2013,
SUM(CASE WHEN tran.transactionyear = 2014 THEN tran.cfr ELSE 0 END) 2014,
SUM(CASE WHEN tran.transactionyear = 2015 THEN tran.cfr ELSE 0 END) 2015,
SUM(CASE WHEN tran.transactionyear = 2016 THEN tran.cfr ELSE 0 END) 2016,
SUM(CASE WHEN tran.transactionyear = 2017 THEN tran.cfr ELSE 0 END) 2017
FROM Stransaction tran, Customer cus, Productfamily family, Country country
WHERE tran.customer_customerid = cus.customerid AND cus.country_countryid = country.countryid
AND tran.productfamily_productfamilyid = family.productfamilyid AND country.countryname = 'Germany'
AND tran.transactionyear > 2012 AND tran.transactionyear < 2018 AND family.prodfamname = 'Bond-offset Paper'
GROUP BY (cus.customername);
百分比必须从每年的销售总额所有客户的获得。例如,2014年客户1的销售额占2014年所有客户总销售额的2014年客户1的销售额。最后您应该看到如下表格:
C =客户& & 1 =客户名称
C| 2013 | % | 2014 | % | 2015 | % | 2016 | % | 2017 |
|-------|-------|-------|-------|-------|-------|-------|-------|------|
1|165.250|100,00%|152.336|100,00%|136.540|100,00%|121.533|100,00%|80.345|
我怎样才能获得总计在同一个查询?我测试了OVER等函数,但是这个函数应用于所有数据(并且数据是所有年份而不是特定年份 - >由于WHERE应用)。
谢谢,我惊讶于答案的质量,它实际上工作。我想问你是否知道一本好书能够学习这个新标准,或者如果你推荐我在互联网上搜索。 @ThorstenKettner – BiteBat
不,对不起,我没有任何建议。我一直在使用SQL大约二十年,现在主要从Google和SO学习。但这不是一般性建议。我已经看到了w3schools,绝对不会推荐,但我没有其他建议。 –
我了解你,无论如何非常感谢你。 – BiteBat