已经看过,也许问了错误的方法,但找不到相关的问题。基于3个字段的记录的某个记录的总和
我有一个表有4个字段,一个ID是另一个记录,然后是成本类型,补充类型和金额。
需要能够为其中一个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
所以去SS补充添加DBCOST和DBCOST_TAX。
我只是不知道如何进入查询给我的每个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')
这是一个较大的查询的一部分,但只有这个部分的麻烦。
希望在这里有足够的信息可以帮助我。
添加到这个8月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