2012-07-19 101 views
0

我正在使用Report Builder 3編寫報表,並且我需要一些幫助以獲取唯一值。SQL - 如何在查詢中插入子查詢以檢索唯一值

使用下面的示例數據:

enter image description here

我需要能夠得到一個單值feeBudRec返回每個feeRef。每個feeBudRec的值對於每個單獨的feeRef總是相同的(例如,對於每個數據行的費用,參考LR01將具有1177的feeBudRec)。

爲什麼我需要爲每個feeB獲得一個單一的feeBudRec值參考是我需要能夠爲feeBin中的每個feeRef獲得feeBudRec值(例如,對於feePinLEE,我需要總計feeBudRec值爲LR01和PS01應該是1177 + 1957才能得到總計3134;但是如果我沒有feeBudRec的唯一值,它會爲每一行添加值,這將爲總共11756個8 LEE行)。

我的編寫SQL查詢的經驗非常有限,但是從搜索互聯網看起來,我需要在我的SQL查詢中放入一個子查詢,以便爲每個feeRef獲取一個唯一的feeBudRec數字,並且每個feeRef獲得最低feeBudRec值的子查詢應該適用於我。

基於我發現的例子,我覺得有以下子查詢應該工作:

SELECT a.feeRef, a.feeBudRec 
    FROM (
    SELECT uvw_EarnerInfo.feeRef, Min(uvw_EarnerInfo.feeBudRec) as AvailableTime 
    FROM uvw_EarnerInfo 
    GROUP BY 
    uvw_EarnerInfo.feeRef 
) as x INNER JOIN uvw_EarnerInfo as a ON a.feeRef = x.feeRef AND a.feeBudRec = x.AvailableTime; 

的問題是,我不知道如何將子查詢到我使用產生查詢報告(如下):

SELECT 
    uvw_EarnerInfo.feeRef 
    ,uvw_EarnerInfo.PersonName 
    ,uvw_EarnerInfo.PersonSurname 
    ,uvw_EarnerInfo.feePin 
    ,uvw_RB_TimeLedger.TimeDate 
    ,uvw_RB_TimeLedger.matRef 
    ,uvw_RB_TimeLedger.TimeTypeCode 
    ,uvw_RB_TimeLedger.TimeCharge 
    ,uvw_RB_TimeLedger.TimeElapsed 
    ,uvw_WoffTimeByTime.WoffMins 
    ,uvw_WoffTimeByTime.WoffCharge 
    ,uvw_EarnerInfo.feeBudRec 
    ,uvw_EarnerInfo.personOccupation 
FROM 
    uvw_RB_TimeLedger 
    LEFT OUTER JOIN uvw_WoffTimeByTime 
    ON uvw_RB_TimeLedger.TimeId = uvw_WoffTimeByTime.TimeId 
    RIGHT OUTER JOIN uvw_EarnerInfo 
    ON uvw_EarnerInfo.feeRef = uvw_RB_TimeLedger.feeRef 
WHERE 
    uvw_RB_TimeLedger.TimeDate >= @TimeDate 
    AND uvw_RB_TimeLedger.TimeDate <= @TimeDate2 

如果子查詢會得到正確的結果,任何人都可以請幫我將它插入我的報表查詢。否則,任何人都可以讓我知道我需要做什麼才能爲每個feeRef獲得唯一的feeBudRec值?

回答

-1

Report Builder的關鍵是從偏移量中獲得正確的查詢,然後讓嚮導爲您構建報表。它需要手動構建報告的所有努力。 我現在還沒有使用過Report Builder,但是在顯示查詢圖形表示的報表的查詢生成器中,您應該可以將列拖入和拖出查詢集。向上拖動列並顯示列(顯示列)會導致您的報告在此列上中斷。 如果以這種方式進行重組,您可能需要再次運行報告生成器以重新生成報告並對其進行重構。 一旦您對結構感到滿意,您就可以開始添加彙總列。

+0

感謝您的回覆。我應該提到我之前已經使用了Report Builder,但是我之前從來沒有必要爲此報告提供像這樣的獨特值。不幸的是,這不是正確格式化報告的問題。如果我在中斷的左側(即作爲一個組,而不是報告的詳細信息)放置feeBudRec列,並嘗試將feeBin的feeBudRec的值相加,我會得到相同的錯誤結果(將費用總和加起來如果feeBudRec字段是細節的一部分,則與我一樣,每個feeRef的每行數據的值)。 – tefkae 2012-07-19 15:51:02

0

取決於確切的模式,但假設uvw_EarnerInfo列出了引腳,參考和建議沒有重複,嘗試在你的查詢的結尾,如添加一個額外的列(personOccupation後):

feeBudRecSum = (Select SUM(FeeBudRec) From uvw_EarnerInfo x 
      where x.feePin = uvw_EarnerInfo.feePin 
      Group By x.FeePin) 

請注意,您不會在報告中彙總這些值。這一欄應該有你正在尋找的總數。