我有一個查詢,我似乎被卡住,我不知道如何解決這個問題。它只是在查詢的中間部分將我拋棄。我只是想用一個左連接來計算和總結一個字段的總成本,並且總和是正確的。我相信問題是如果在同一張桌子上有超過1個與該賬戶相關的項目,它將總結多次,總額將不正確。這裏是我與....左加入正確的總數,經過計數和總和挑戰
left join
(select distinct (soid), count(*) as oaccount, sum(amount) as c3 from
soorderdetails where soorderdetails.description like 'Installation%' or
soorderdetails.description like 'Training%' or soorderdetails.description
like 'Fusion Report%' group by soid) as o on o.soid=s.soid
The result I would like to obtain is:
Job# | (c3) | Soid
----- | -----|-----
223 | 2000 | 212 (1 record - c3 amount - 1=2000)
224 | 300 | 213 (2 record - c3 amount - 1=100 + 2=200)
225 | 4333 | 214 (1 record - c3 amount - 1=4333)
226 | 1000 | 215 (3 record - c3 amount - 1=200 + 2=300 + 3=500)
But I am getting this....
Job# | (c3) | Soid
-----| -----|-----
223 | 2000 | 212 (1 record...sum is correct here)
224 | 600 | 213 (2 record - 1=100x2 + 2=200x2)=WRONG
225 | 4333 | 214 (1 record...sum is correct here)
226 | 2500 | 215 (3 record - 1=200x3 + 2=300x3 + 3=500x3)=WRONG
我正在尋找的是與(C3)場的每個不同的總和一起顯示所有不同(soid)記錄奮力一節( soid)記錄。
所以用上面的查詢,我可以看到C3的總和顯示。如果只有1條記錄,那麼總和顯示正確,如果有超過1條記錄,則記錄數將乘以找到的soid匹配的數量,然後一起加上總和值。我試圖採用一些在這裏找到的解決方案,但仍然無法正確顯示它。任何人都可以提供幫助嗎?先進的謝謝!
- 表1具有匹配soid id字段(s.soid)
表2具有soid,描述和量字段(o.soid)
我試圖左連接表2到表1通過使用soid字段。
- 我想正確地總結金額領域。現在看來,每個'金額'總和乘以該記錄的計數值。謝謝!
下面是完整的查詢......
SELECT DISTINCT (jobnumber) as l1,
c2 as l2,
sum(isnull(c3,0)) as l3,
sum((isnull(c3,0)/150)*50) as l4,
sum(c5) as l5, sum(c6) as l6,sum(c5+c6) as l7,
sum(c5*25.27) as l8,
isnull(c9,0) as l9,
(sum(c5*25.27)+(isnull(c9,0))) as l10,
sum((isnull(c3,0)/150)*50)-(sum(c5*25.27)
+(isnull(c9,0))) as l11 ,
sum(isnull(c3,0))-(sum(c5*25.27)+(isnull(c9,0))) as l12
FROM (
SELECT DISTINCT (j.jobnumber),
customername as c2,
c3,
c5,
c6,
c9
FROM dbo.SOOrders as s
LEFT JOIN (
SELECT DISTINCT (jobid),
COUNT(*) as s9,
sum(total) as c9
FROM apvouchers
GROUP BY jobid
) as v ON v.jobid = s.jobid
LEFT JOIN (
SELECT DISTINCT (soid),
COUNT(*) as oaccount,
SUM(amount) as c3
FROM soorderdetails
WHERE description LIKE 'Installation%'
OR description LIKE 'Training%'
OR description LIKE 'Fusion Report%'
GROUP BY soid
) as o ON o.soid = s.soid
INNER JOIN sccalls as t ON t.jobid = s.jobid
INNER JOIN (
SELECT DISTINCT(callid),
COUNT(*) as myaccount,
SUM(actualhours) as c5,
SUM(overtimehours) as c6
FROM scqreportlabors
WHERE actualhours > 0
GROUP BY callid
) as r ON r.callid = t.callid
LEFT JOIN ShAgents ON AgentID = TechnicianID
LEFT JOIN arcustomers as c ON c.customerid = s.customerid
INNER JOIN icjobs as j ON j.jobid = s.jobid
WHERE j.active = 1
) as x
GROUP BY jobnumber, c2, c9
ORDER BY jobnumber DESC
請添加示例數據和預期輸出。 – Kevin
向我們展示數據庫模式,樣本數據和預期輸出。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)來了解如何提高您的問題質量並獲得更好的答案。 \t [**如何創建一個最小的,完整的,並且可驗證例如**](http://stackoverflow.com/help/mcve) \t嘗試創建http://rextester.com –
一個什麼樣只有在針對'soorderdetails'表運行子查詢時纔會得到結果? c3會返回預期的結果嗎?如果你的問題存在於子查詢中,那麼它與你的'LEFT JOIN'無關,因爲你所顯示的括號內的所有內容都是獨立的。一個問題子查詢會提示你要麼不明白'amount'字段中存儲了什麼,要麼你對該表有一個規範化問題。 – DanK