У вас был взгляд и, возможно, неправильный способ, но я не могу найти связанный с ним вопрос.Сумма определенных записей в одной таблице на основе записей из 3 полей
У меня есть таблица, которая имеет 4 поля, идентификатор, который предназначен для другой записи, а затем тип затрат, тип и сумма доплаты.
Нужно иметь возможность добавить поле суммы двух видов затрат по одному из типов Дополнения для одного из ID.
PCM_ID COST_TYPE SUPPLEMENT_TYPE AMOUNT
-----------------------------------------------------
2238 AGENT SS 85.785
2238 DBCOST SS 77.9891
2238 DBCOST_TAX SS 7.7989
2238 DBSELL SS 85.785
2238 DBSELL_TAX SS 8.5785
2238 PCCOM_TAX SS 0
2238 PCMUP_TAX SS 0
2238 RETAIL SS 85.785
Итак, мы добавили DBCOST и DBCOST_TAX для дополнения SS.
Я просто не знаю, как попасть в запрос, чтобы дать мне значение для каждого PCM_ID для вышеуказанного.
Мои умения SQL очень ограничены и в основном я преподаю, поэтому вот что я до сих пор.
SELECT SUM (pcs.amount)
FROM dbo.PCS
JOIN dbo.pcm ON pcm.pcm_id = PCS.PCM_ID
WHERE pcs.pcm_id = pcm.pcm_id
and pcs.supplement_type = 'SS'
AND pcs.cost_type IN ('DBCOST','DBCOST_TAX')
Это часть более крупного запроса, но только проблема с этой частью.
Надеюсь, здесь имеется достаточно информации, что вы можете мне помочь.
Добавление к этому 10 авг
Ниже приведен сценарий, как мне нужно, меньше несколько полей, которые являются прямыми данными.
Select
ID=pcm.pcm_id,
Name=pcm.name,
Half_TW_Cost=(SELECT round (SUM(ppc.pax_tw),2) FROM dbo.ppp
JOIN dbo.ppc ON ppp.ppp_id = ppc.ppp_id
WHERE pcp.pcp_id = ppp.pcp_id AND ppc.cost_type IN ('DBCOST','DBCOST_TAX')),
Half_TW_Sell=(SELECT round (SUM(ppc.pax_tw),2) FROM dbo.ppp
JOIN dbo.ppc ON ppp.ppp_id = ppc.ppp_id
WHERE pcp.pcp_id = ppp.pcp_id AND ppc.cost_type IN
('AGENT','DBSELL_TAX','PCMUP_TAX','PCCOM_TAX')),
SS_Cost=(SELECT round (SUM (pcs.amount),2) FROM dbo.PCS
JOIN dbo.pcm ON pcm.pcm_id = PCS.PCM_ID
WHERE pcs.pcm_id = pcm.pcm_id AND pcs.supplement_type = 'SS' AND pcs.cost_type
IN ('DBCOST','DBCOST_TAX')),
Range_Seq=pcp.seq,
Pax_Range=pcp.pxno
FROM dbo.pcm
LEFT JOIN dbo.pcp ON pcp.pcm_id = pcm.pcm_id
where pcm.pcm_id = 2238
group by PCM.PCM_ID, pcm.NAME, pcp.PCP_ID, pcp.SEQ, pcp.PXNO
Результаты я получить следующим образом:
ID Name Half_TW_Cost Half_TW_Sell SS_Cost Range_Seq Pax_Range
-----------------------------------------------------------------------------------------
2238 Brett test PCM Output 106.1200 117.5300 546913.1800 1 10
2238 Brett test PCM Output 99.7200 110.2400 546913.1800 2 15
2238 Brett test PCM Output 96.2400 106.2700 546913.1800 3 20
2238 Brett test PCM Output 94.1500 103.8900 546913.1800 4 25
2238 Brett test PCM Output 88.5900 102.3000 546913.1800 5 30
2238 Brett test PCM Output 92.6100 103.2300 546913.1800 6 2
Значение для SS_Cost является общей для таблицы, а не для PCM_ID. Значение, которое я получаю после: 85.79, которое является DBCOST + DBCOST_TAX. Я знаю, что это значение агента выше, но это не включает разметку в этой записи, и поэтому это изменится, поэтому мне действительно нужны DBCOST и TAX. Также я не могу исчислять налог, поскольку некоторые услуги не имеют налога, так что это не всегда 10%. Любая помощь только для того, чтобы SS_Cost была значением для отдельного PCM, была бы оценена.
Вы имеете в виду обновление или просто выбрать? Отправьте желаемый результат для данных образца. Кроме того, какие RDBMS вы используете. –
Мои навыки SQL также очень ограничены. Сказав это, то, что вы написали, выглядит хорошо ... что именно происходит неправильно? Верно ли возвращаемое значение? – munyul
Удалите самые внешние(). Добавьте 'PCM_ID, Cost_type, Supplement_type' после SELECT и:' GROUP BY PCM_ID, Cost_type, Supplement_type' в конце. – makciook