2016-06-30 20 views
-1

Ich habe diese drei TischSQL-Abfrage: Wie doppelte Servicegebühr zu entfernen?

ITEM Tabelle:

ITEM_ID AMOUNT_DUE SERVICE_CHARGE 
----------------------------------- 
1   1000  100 

TENDER Tabelle:

ITEM_ID TYPE_ID AMOUNT 
------------------------------- 
1   0  600 
1   1  500 

TYPE Tabelle:

TYPE_ID TYPE_NAME 
------------------------------- 
0   CASH 
1   CREDIT 

Ich habe versucht:

select 
    TYPE_NAME, 
    sum(AMOUNT) as Amount, 
    sum(ServiceCharge) as SC 
from 
    TENDER 
left join 
    TYPE on TYPE.TYPE_ID = TENDER.TYPE_ID 
left join 
    ITEM on ITEM.ITEM_ID = TENDER.ITEM_ID 
group by 
    TYPE_NAME 

Aber Ergebnisse für Service Charge wie

TYPE_NAME AMOUNT SC 
------------------------------- 
CASH   650  100 
CREDIT  500  100 

HINWEIS dupliziert wurden: Service Charge * berechnet wird 10

+2

Summieren Sie das Feld 'Betrag' anstelle des Feldes' Betrag_Wert'? Wenn nicht, verstehe ich nicht, warum Sie nicht 1000 für die "Menge" für jeden Typ bekommen würden. Die Abfrage, die Sie haben, macht das, was Sie von ihm verlangen. Was sind Ihre gewünschten Ergebnisse? – sgeddes

+0

Es scheint, dass die Servicegebühr bereits in den "TENDER_TABLE" -Beträgen aufgerollt ist. Ist das richtig? –

+0

Bearbeitet Entschuldigung soll Betrag sein – FatalError

Antwort

1

vielleicht so etwas wie folgt aus:

select TYPE_NAME, sum(AMOUNT) as Amount, 
sum(ServiceCharge)/ (COUNT(*) OVER (PARTITION BY TENDER.ITEM_ID)) as SC 
from TENDER 
LEFT JOIN TYPE ON TYPE.TYPE_ID = TENDER.TYPE_ID 
LEFT JOIN ITEM ON ITEM.ITEM_ID = TENDER.ITEM_ID 
GROUP BY TYPE_NAME, TENDER.ITEM_ID; 
+0

Hallo ich versuchte Partition, aber Gruppe von Item_ID wird Type_Name duplizieren, wenn ich einen anderen Verkauf mit einer anderen Item_ID hinzufügen. Typenname sollte konsolidiert sein. Beim Hinzufügen weiterer Verkaufsergebnisse zu CASH CREDIT CASH – FatalError

0

Ich vermute, dass Sie dies wünschen:

select ITEM.ITEM_ID, ServiceCharge, 
     SUM(CASE WHEN TYPE_NAME = 'CASH' THEN Amount END) as Cash, 
     SUM(CASE WHEN TYPE_NAME = 'CREDIT' THEN Amount END) as Credit 
from TENDER LEFT JOIN 
    TYPE 
    ON TYPE.TYPE_ID = TENDER.TYPE_ID LEFT JOIN 
    ITEM 
    ON ITEM.ITEM_ID = TENDER.ITEM_ID 
GROUP BY ITEM.ITEM_ID, ServiceCharge; 

Dies setzt die Werte in Spalten, so t hier ist keine Vervielfältigung.

+0

TypeName ist Dynamic es ist nicht auf Bargeld oder Kredit festgelegt. – FatalError

1

Da die service charge 10% des amount ist, brauchen Sie nicht wirklich zu join zum item Tisch. Stattdessen vermehren nur die sum(amount) von 0,1:

select TYPE_NAME, sum(AMOUNT) as Amount, sum(AMOUNT) * .1 as SC 
from TENDER 
    LEFT JOIN TYPE ON TYPE.TYPE_ID = TENDER.TYPE_ID 
GROUP BY TYPE_NAME 

in Resultierende:

type_name Amount SC 
Cash  600  60 
Credit  500  50 
+0

aber SC summiert sich auf 110 statt 100 – FatalError

+0

@FatalError - 10% von 600 + 500 ist 110 ... Ihre Beispieldaten nicht scheint korrekt zu sein ... Irgendetwas ist noch nicht in Ordnung, aber das sollte dich nah bringen ... – sgeddes

-1

Wird diese Arbeit für Sie. Bitte ändern Sie die Spaltennamen nach Ihren

SELECT 
    tender.item,typename,SUM(amount)as amount, SUM(Service_Charge/cntItem) as servercharge 
FROM 
    woddb.TENDER_Table as Tender 
INNER JOIN 
    (SELECT item, count(item) as cntItem FROM woddb.Tender_Table GROUP BY ITEM) as cntTable 
ON 
    Tender.item = cntTable.Item 
LEFT JOIN 
    woddb.TYPE_Table as TYPETable 
ON 
    TYPETable.TYPEID = Tender.TYPEID 
LEFT JOIN 
    woddb.ITEM_table as ITEMtable 
ON 
    ITEMtable.ITEM = Tender.ITEM 
GROUP BY 
    tender.item,typename 
0

I kombiniert Slava Murygin und sandeep rawat Antworten, diese geben mir richtige Ergebnisse für nachfolgende Umsatz.

kamen mit diesem

;WITH SUMS AS (
select TYPE_NAME, AMOUNT as Amount, 
sum(ServiceCharge)/ (COUNT(*) OVER (PARTITION BY TENDER.ITEM_ID)) as SC 
from TENDER 
LEFT JOIN TYPE ON TYPE.TYPE_ID = TENDER.TYPE_ID 
LEFT JOIN ITEM ON ITEM.ITEM_ID = TENDER.ITEM_ID 
GROUP BY TYPE_NAME, TENDER.ITEM_ID, AMOUNT 
) 
Select Type_Name , Amount, Tender.ITEM_ID 
From Sums 
Group by TYPE_NAME 

Dank up!

Verwandte Themen