2016-12-08 2 views
0

Мои ребята, Мэтт здесь. У меня проблемы с относительно сложным взглядом. У меня есть таблица деталей и сервисов, каждая из которых имеет уникальные идентификаторы для данной части/услуги. Я пытаюсь связать их с таблицей счетов услуг и последующим представлением как отношения M: N, поэтому я установил промежуточные реляционные таблицы, причем номер счета-фактуры (первичный ключ счета-фактуры) и номер части/услуги (часть/первичный ключ службы) в качестве комбинированного первичного ключа. Вот мой код для всего отношения и зрения:Не удалось суммировать столбцы в SQL Server, подключенном к представлению

CREATE TABLE service_invoice 
( servinv_Num VARCHAR2(10) CONSTRAINT serv_snum_PK PRIMARY KEY, 
    servinv_EmpID NUMBER(6) CONSTRAINT serv_empnum_FK REFERENCES employee(empID), 
    servinv_CustID NUMBER(6) CONSTRAINT serv_custid_FK REFERENCES customer(custID), 
    servinv_VIN VARCHAR2(25) CONSTRAINT serv_VIN_FK REFERENCES vehicle(vehicle_vin), 
    servinv_Terms VARCHAR2(6) CONSTRAINT serv_trms_NN NOT NULL, 
    servinv_Date DATE); 


CREATE TABLE Parts 
( PartID VARCHAR2(10) CONSTRAINT Part_PartID_PK PRIMARY KEY, 
    PartDesc VARCHAR2(50) CONSTRAINT Part_PartDesc_NN NOT NULL, 
    PartCharge NUMBER(4,2) CONSTRAINT Part_PartCharge_NN NOT NULL); 


CREATE TABLE Service 
( ServiceID VARCHAR2(10) CONSTRAINT Serv_ServID_PK PRIMARY KEY, 
    ServDesc VARCHAR2(50) CONSTRAINT Serv_ServName_NN NOT NULL, 
    ServCharge NUMBER(4,2) CONSTRAINT Serv_ServCharge_NN NOT NULL); 


CREATE TABLE Serv_SI_Rel 
( SI_num VARCHAR2(10) CONSTRAINT ServSI_SInum_FK REFERENCES service_invoice(servinv_Num), 
    ServiceID VARCHAR2(10) CONSTRAINT ServSI_ServID_FK REFERENCES Service(ServiceID), 
    CONSTRAINT ServSI_SInum_ServID_PK PRIMARY KEY(SI_num, ServiceID)); 

CREATE TABLE Parts_SI_Rel 
( SI_num VARCHAR2(10) CONSTRAINT PartSI_SInum_FK REFERENCES service_invoice(servinv_Num), 
    PartID VARCHAR2(10) CONSTRAINT PartSI_PartID_FK REFERENCES Parts(PartID), 
    CONSTRAINT PartSI_SInum_PartID_PK PRIMARY KEY(SI_num, PartID)); 


CREATE OR REPLACE VIEW ServiceInvoiceDoc 
AS 
( 
SELECT si.servinv_Num, si.servinv_Date, si.servinv_Terms, 
    es.empName, 
    sc.custName, sc.custHouse, sc.custCity, 
     sc.custState, sc.custZIP, sc.custPhone, sc.custEmail, 
    sv.vehicle_VIN, sv.vehicle_mileage, 
    srel.ServiceID, 
    prel.PartID, 
    s.ServDesc, s.ServCharge, 
    p.PartDesc, p.PartCharge, 
    SUM(s.ServCharge) TotalServCharges, 
    SUM(p.PartCharge) TotalPartsCharges, 
    (SUM(s.ServCharge)+SUM(p.PartCharge)) SubTotalCharges, 
    (SUM(s.ServCharge)+SUM(p.PartCharge))*0.0825 Taxes, 
    (SUM(s.ServCharge)+SUM(p.PartCharge))*1.0825 TotalCharges 

    FROM service_invoice si 
JOIN employee es 
    ON (es.empID = si.servinv_EmpID) 
JOIN customer sc 
    ON (sc.custID = si.servinv_CustID) 
JOIN vehicle sv 
    ON (sv.vehicle_VIN = si.servinv_VIN) 
LEFT OUTER JOIN Serv_SI_Rel srel 
    ON (srel.SI_Num = si.servinv_Num) 
LEFT OUTER JOIN Parts_SI_Rel prel 
    ON (prel.SI_num = si.servinv_Num) 
JOIN Parts p 
    ON (prel.PartID = p.PartID) 
JOIN Service s 
    ON (srel.ServiceID = s.ServiceID)); 

Я получаю ошибку связано с суммированием отдельных частей и расходов на обслуживание в M: N отношения. Вот код ошибки от бега:

ORA-00937: not a single-group group function 

Я попытался фиксации с группой по команде, но идентификатор группировки (услуга счета-фактуры) не входит на часть или служебных таблиц, и присоединяется к Дон» t, похоже, связывают их для группы. например Я пытался позвонить GROUP BY si.servinv_Num

Можно ли это решить вообще или это совершенно неправильно? У меня есть возможность отказаться от отношения M: N как 1: M и просто сделать отдельный счет за каждую часть/плату за обслуживание, но я бы предпочел сохранить его компактным и профессиональным.

Любая помощь была бы принята с благодарностью. Большое вам спасибо за ваше время!

+0

Пожалуйста, измените свой пост - в частности, теги внизу. (Предполагая, что вы НЕ используете оракулу и оракулу.) – mathguy

ответ

0

а) неправильный тег

б) Я полагаю, вы должны были бы перечислить все столбцы в группе по статье, не обобщается, а в Oracle

... 
group by si.servinv_Num, si.servinv_Date, si.servinv_Terms, 
    es.empName, 
    sc.custName, sc.custHouse, sc.custCity, 
     sc.custState, sc.custZIP, sc.custPhone, sc.custEmail, 
    sv.vehicle_VIN, sv.vehicle_mileage, 
    srel.ServiceID, 
    prel.PartID, 
    s.ServDesc, s.ServCharge, 
    p.PartDesc, p.PartCharge