2013-03-20 48 views
1

我一直在嘗試解決這個查詢超過一個星期,我不能sem得到它的權利。放下一個完整的兔子洞讓我接近,但一直在變得越來越大。所以我想從頭開始。錯誤的邏輯,MSSQL,Coldfusion,來自查詢的重複結果

因爲它最初寫的:

<cfquery name="unbilledMisc" datasource="#request.dsn#"> 
SELECT BM.*, C.Client, U.Name, R.FrequencyUnit, R.FrequencyDuration, R.RBID 
FROM BilledMisc BM 
    LEFT JOIN Clients C on C.ClientID = BM.ClientID 
    LEFT JOIN Users U on U.UserID = BM.UserID 
    LEFT JOIN RecurringBilling R ON (R.ClientID = C.ClientID AND BM.Rate = R.Rate AND BM.Title = R.Title) 
WHERE (BM.CID = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">) 
AND (BM.Invoiced = 0) 
ORDER BY BM.DateCompleted ASC; 
</cfquery> 

BM * = BM.BMID,BM.Userid,BM.ClientID,BM.Rate,BM.Title,BM.CID,BM.QTY,BM。 DateCompleted

的輸出行的樣子:

<td class=""><input type="checkbox" class="BMIDCheckBoxes" name="BMID" value="#BMID#" />#Client#</td> 
<td class=""> 
    <cfif #Qty# eq ""> 
    - 
    <cfelse> 
     <a href="##" class="UpdateFeeItem invoices" title="#BMID#">#NumberFormat(Qty, '9999.99')#</a> 
    </cfif> 
</td> 
<td class="">#Name#</td> 
<td> 
<cfif #RBID# neq ''> 
<cfswitch expression="#FrequencyUnit#"> 
    <cfcase value="d"> 
     <cfset FreqOutput = 'Day(s)'> 
    </cfcase> 
    <cfcase value="ww"> 
     <cfset FreqOutput = 'Week(s)'> 
    </cfcase> 
    <cfcase value="m"> 
     <cfset FreqOutput = 'Month(s)'> 
    </cfcase> 
    <cfcase value="q"> 
     <cfset FreqOutput = 'Quarter(s)'> 
    </cfcase> 
    <cfcase value="yyyy"> 
     <cfset FreqOutput = 'Year(s)'> 
    </cfcase> 
</cfswitch> 
<a href="##" name="#RBID#" id="UpdateRecItem" class="link"><img src="images/edit_icon.png" /></a> 
Recurrs Every #FrequencyDuration# #FreqOutput# 
</cfif> 
</td> 
<td class="">#DateFormat(DateCompleted, 'mm/dd/yyyy')#</td> 
<td style="width:50px;" align="center"><a href="##" class="DeleteFeeItem" title="#BMID#"><img src="images/delete_icon.png" alt="Delete" title="Delete" /></a></td> 

我接受任何建議,一個更好的方式來做到這一點。

您可以設置一次性費用,或者設置類似一次性費用的費用,然後以相同的美元金額爲基礎重複每隔設定的時間間隔(日,周,月,季度,年)在每單位價格和數量。

如果您只收取一次性費用,一切都很好。

當您制定第一筆經常性費用時,一切都很好。

但讓我們說2周過去和500其他客戶。並且您將爲該客戶設置另一個時間費用,由同一用戶設置,對於相同數量的相同產品,我得到一個重複行,與不同BMID共享相同的RBID

本質上是1的那些行有一次應該重複發生的費用,以及另一個相同的一次性費用,認爲它應該重現,並且具有第一行的RBID。

如果你是一家小公司,你會記得進入並編輯第一筆費用的金額,但是如果你是一家大公司而且不記得,那麼他們會記錄這個錯誤。

請讓我知道,如果我需要詳細說明這一點的任何部分。我很樂意。

編輯: 在以不同的方向去的危險,我也考慮增加新的列重複表中,就拿着BMID每個定期項目如果存在的話。這樣,我可以只參考很多重複費用,每一次的費用都由1列組成。

我猜想提交時,它會將所有數據添加到billedMisc中的新行,這會創建一個自動增加的BMID,然後如果設置了循環費用,則將循環數據添加到新創建的新的重複出價行中BMID。這將通過特定的標識符將它們鎖定在一起,而不是查看哪個速率,數量,用戶,客戶端......匹配。

想法......感覺?

編輯:我拋棄在我的項目此查詢並添加一個新列一個表,將其鎖定到收費項目

MODS的隨意刪除,如果這樣的傾向

+1

你不清楚說明你有什麼問題。 – Busches 2013-03-20 16:09:27

+1

對不起,我已經閱讀了幾次,仍然不明白你遇到了什麼問題:)查詢返回「重複」,輸出,...?你的代碼的* actual *結果是什麼?它們與你預期的結果有什麼不同?這也有助於看到一個小的數據轉儲。 – Leigh 2013-03-20 17:16:37

+0

我編輯更多的解釋。我的道歉,我更專注於確保所有信息都在那裏,而不是發生了什麼,以及我需要做什麼。感謝lookng。 – 2013-03-20 17:38:41

回答

1

疑難解答如下。首先:

<cfquery name="test"> 
select BM.cid 
from BilledMisc BM 
where BM.CID = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">) 
and BM.invoiced = 0 

添加您先加入,然後再次運行它。如果記錄數增加,運行一些更多的查詢來找出原因。

如果在一天結束時您要獲取多行,請查看「select distinct」是否消除該問題。如果沒有,請查看正在返回的數據並決定哪個記錄是您想要的。

+0

謝謝,我現在就開始這個。 – 2013-03-20 17:54:12