2016-11-11 68 views
0

我有表A,其中一行的總保費爲政策編號和QuoteID。 enter image description here如何加入一對多並保持相同的總金額

我需要將它連接到表B,它有許多行具有相同的Policy#和QuoteID但不同的WeightCode和ClassCode。

enter image description here

我如何加入這兩個表的,所以我可以從表A只保留一個總(WP)? 因爲後來,當我在SSRS中總結(WP)時,它會給我錯誤的數字。

可以說,我想這樣的事情只有一個WP = 16630餘爲0:

enter image description here

+0

海事組織你正在處理錯誤的問題;也就是說你正在修復一個不能解決問題的症狀,或者你的方法有缺陷。對於其他值,您不希望爲0,您希望在加入之前彙總(總和)並獲取誇大的值,或者僅爲每個quiteID使用最小/最大值,或者將quoteID作爲分區使用分析總和。看起來你確實需要表B中的所有記錄,這只是影響你的總和。如果不知道「以後」涉及哪些表格以及需要總結什麼內容,則無法真正幫助更多。顯示實際問題;不要提及它。 – xQbert

+0

如果你真的想要返回所有記錄,但只有其中一個記錄的值,那麼什麼樣的業務規則可以確定哪一個記錄? – HLGEM

+0

表B中的PK是什麼? – HLGEM

回答

1

我同意上司的評價,認爲它好像你正在試圖解決錯誤的問題。如果您使用的是SSRS,那麼您可以在報告的不同部分使用多個數據集。你會得到你的第一個數據集爲TableA,第二個數據集爲TableB。我相信這可能是你最好的選擇。

但是,如果你真的想在一個查詢的數據集,這應該這樣做:

SELECT 
    b.QuoteID, 
    b.PolicyNumber, 
    b.WeightClass, 
    b.SecondaryLiabFactor, 
    b.ClassCode, 
    CASE 
     WHEN ROW_NUMBER() OVER(PARTITION BY a.QuoteID ORDER BY (SELECT 0)) = 1 THEN a.WP 
     ELSE 0 
    END, 
    a.YearNum, 
    a.MonthNum 
FROM TableA AS a 
    INNER JOIN TableB AS b ON a.QuoteID = b.QuoteID 

它使用ROW_NUMBER(),以檢查它是否在加盟的第一個記錄並返回WP值,如果是這樣,否則將顯示0ORDER BY (SELECT 0)只是因爲你不需要行號是基於任何明確的順序。

+0

#jtate。謝謝你的建議。它完全適用於我的部分項目。但現在我必須加入更糟的事情。也許你會有一秒鐘看看它? http://stackoverflow.com/questions/40622393/how-to-join-many-to-many-and-keep-the-same-total-amount – Oleg