帳戶(表)最佳方式加入兩個表*包括*副本從一個表
+----+----------+----------+-------+
| id | account# | supplier | RepID |
+----+----------+----------+-------+
| 1 | 123xyz | Boston | 2 |
| 2 | 245xyz | Chicago | 2 |
| 3 | 425xyz | Chicago | 3 |
+----+----------+----------+-------+
支出(表)
+----+----------+----------+-------------+--------+
| id | account# | supplier | datecreated | Amount |
+----+----------+----------+-------------+--------+
| 5 | 245xyz | Chicago | 01-15-2009 | 25 |
| 6 | 123xyz | Boston | 10-15-2011 | 50 |
| 7 | 123xyz | Boston | 10-15-2011 | -50 |
| 8 | 123xyz | Boston | 10-15-2011 | 50 |
| 9 | 425xyz | Chicago | 10-15-2011 | 100 |
+----+----------+----------+-------------+--------+
我有賬表,我有支付表。支付表來自國外,所以我們無法控制它。這給我們帶來了一個問題,即我們無法根據記錄ID字段來加入這兩個表,這是我們無法解決的一個問題。因此我們根據賬號#,供應商ID(第二和第三列)加入。這會產生一個問題,它可能會創建(可能)多對多的關係。但是,如果它們處於活動狀態,我們會過濾我們的記錄,並在創建支出時在支付表上使用第二個過濾器。付款是按月份創建的。有兩個問題在我看來
- 查詢需要相當長的時間才能完成(可能是低效)
- 有一些重複的是被刪除不應刪除。示例是支付表中的記錄6和8。這裏發生的事情是,我們找到了一位顧客,然後顧客取消了,然後他又找回了顧客。在這種情況下+50,-50和+50。再次,所有值都是有效的,並且必須顯示在報告中以用於審計目的。目前只顯示一個+50,另一個丟失。報告中偶爾會遇到一些其他問題。
這是查詢結果。它使用組來刪除重複項。我希望提前查詢的表現優於其他表,並且考慮到PayOut表中的記錄只要在報告的月份中出現,就不會重複記錄。
這是我們當前的查詢
/* Supplied to Store Procedure */
-----------------------------------
@RepID // the person for whome payout is calculated
@Month // of payment date
@year // year of payment date
-----------------------------------
select distinct
A.col1,
A.col2,
...
A.col10,
B.col2,
B.Col2,
B.Amount /* this is the important column, portion of which goes to Rep */
from records A
JOIN payout B
on A.Supplier = B.Supplier AND A.Account# = B.Account#
where datepart(mm, B.datecreated) = @Month /* parameter to stored procedure */
and datepart(yyyy, B.datecreated) = @Year
and A.[rep ID] = @RepID /* parameter to SP */
group by
col1,col2,col3,....col10
order by customerName
這是查詢優化?我可以使用CROSS APPLY或WHERE EXIST來改進它,它可以使它更快並消除重複問題嗎?
請注意,此查詢用於獲取付費代表。因此,每個記錄都有repid字段分配給誰。理想情況下,我想使用Select WHERE Exist查詢。
你可以在選擇中顯示你的實際字段嗎?知道從哪個表獲取哪些字段是相關的。 – JNK
你究竟想要什麼?你說你有'重複'的問題,但似乎想要多行(7和8)。具有當前/期望的結果集將是有幫助的。 –
我有重複刪除的問題。他們被刪除,但他們應該在那裏。恐怕我無法發佈實際的查詢。我的查詢與實際查詢非常相似,除了在實際查詢中使用MAX(col1 case語句)並且我發現這是unnesssary。這導致使用10組通過語句。我想要一個專家意見,如果這是一個健全的查詢如何改進/修復它。 –