私は固執しているように見える質問があり、問題の解決方法がわかりません。私を捨てているのはクエリの途中のセクションだけです。私はちょうど左の結合を使用してフィールドの合計コストを数えて合計し、合計が正しいようにしたい。私は問題は、同じテーブルにそのアカウントに関連する項目が2つ以上ある場合、それが複数回合計され、合計が正しくないということです。ここでは私が探している私は何とで苦労....は、カウントと合計チャレンジ後に正しい合計で結合したままになります。
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つだけの場合、合計が正しく表示されます。複数のレコードがある場合、レコードの数には、見つかったsoidの一致数が乗算されて合計されます。私はここにあるソリューションのいくつかを採用しようとしましたが、それでも正しく表示することはできません。誰も助けることができるだろうか?先進的でありがとう!
- 表1は、
表2は、私はテーブルを結合左しようとしていsoid、説明および量フィールド(o.soid)
を有するマッチングsoid idフィールド(s.soid)を有します2をテーブル1に追加します。
- 金額欄を適切に合計したいと思います。今のところ、「金額」の合計に、そのレコードで見つかったカウント数が乗算されているようです。ありがとうございました!
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
dbスキーマ、サンプルデータ、および期待される出力を表示します。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (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