2011-10-10 67 views
0
INT

我現在有一個存儲過程返回數據,並在我的報告查看器中顯示,但我的問題是,我檢查,看看是否學生參加上課或不和我有鑄造COALESCE在存儲過程

COALESCE(A.Attended, 0)AS Attended 

這將返回1,如果他們出席和0,如果不是 - 我在報告中只顯示1或0,即使他們可以參加不止一次。我怎樣才能把這個轉換爲int來獲得正確的總數。

感謝

整個查詢:

SELECT 
    P.PartyId, 
    COUNT(COALESCE(A.Attended, 0))AS Attended, 
    COUNT(DISTINCT H.HearingId) AS Hearings, 
    O.OfficeName As OfficeName, 
    CO.Name, 
    P.FirstName AS FirstName, 
    P.LastName AS LastName, 
    P.BirthDate AS DOB 
FROM Activity A 
INNER JOIN ActivityType AT On A.ActivityTypeId = AT.ActivityTypeId 
INNER JOIN ActivityEntry AE ON A.ActivityEntryId = AE.ActivityEntryId 
INNER JOIN HearingEntry HE ON CAE.HearingEntryId = HE.HearingEntryId 
INNER JOIN Hearing H ON HE.HearingEntryId = H.HearingEntryId 
INNER JOIN [Case] C ON H.CaseId = C.CaseId 
INNER JOIN CaseOffice CO ON C.CaseId = CO.CaseId AND AE.OfficeId = CO.OfficeId 
INNER JOIN Office O ON CO.OfficeId = O.OfficeId 
INNER JOIN Attended A ON H.HearingId = A.HearingId 
INNER JOIN Party P ON A.PartyId = P.PartyId 
WHERE HP.PartyId = P.PartyId AND AE.OfficeId = @OfficeId AND(H.HearingDate >= @BeginDate AND (H.HearingDate <= @EndDate OR H.HearingDate IS NULL)) AND HE.HearingEntryId = CAE.HearingEntryId 
GROUP BY P.PartyId, A.Attended, O.OfficeName,CO.Name,P.FirstName, P.LastName,P.BirthDate 
+2

請發表您的整個查詢。你將需要某種聚合查詢。 –

+0

這聽起來像查詢中的錯誤不是合併或鑄造。什麼是完整查詢?你是否證實了acutal A.Atended不是1? – Steve

+0

@MartinSmith我繼續,並添加了查詢 – Masriyah

回答

1

您需要通過參加總結。

SELECT 
    P.PartyId, 
    (SUM(COALESCE(A.Attended, 0)))AS Attended, 
    COUNT(DISTINCT H.HearingId) AS Hearings, 
    O.OfficeName As OfficeName, 
    CO.Name, 
    P.FirstName AS FirstName, 
    P.LastName AS LastName, 
    P.BirthDate AS DOB 
FROM Activity A 
INNER JOIN ActivityType AT On A.ActivityTypeId = AT.ActivityTypeId 
INNER JOIN ActivityEntry AE ON A.ActivityEntryId = AE.ActivityEntryId 
INNER JOIN HearingEntry HE ON CAE.HearingEntryId = HE.HearingEntryId 
INNER JOIN Hearing H ON HE.HearingEntryId = H.HearingEntryId 
INNER JOIN [Case] C ON H.CaseId = C.CaseId 
INNER JOIN CaseOffice CO ON C.CaseId = CO.CaseId AND AE.OfficeId = CO.OfficeId 
INNER JOIN Office O ON CO.OfficeId = O.OfficeId 
INNER JOIN Attended A ON H.HearingId = A.HearingId 
INNER JOIN Party P ON A.PartyId = P.PartyId 
WHERE HP.PartyId = P.PartyId AND AE.OfficeId = @OfficeId AND(H.HearingDate >= @BeginDate AND (H.HearingDate <= @EndDate OR H.HearingDate IS NULL)) AND HE.HearingEntryId = CAE.HearingEntryId 
GROUP BY P.PartyId, O.OfficeName,CO.Name,P.FirstName, P.LastName,P.BirthDate 
+0

感謝我現在認爲它看起來不錯,但一個新的問題出現了,也許就如何一些建議解決這將是巨大的。現在我得到的比聽證會出席會議的次數越多,這是不正確的,因爲聽證會是總數量,並從被協助數應該比一方可能聽證會等於或小於。 – Masriyah

+0

@Amina這意味着一些你內心的連接是傾斜的結果。我不能告訴你這是我不知道的架構和數據。我的建議是,你用一個內部聯接,運行開始解決此查詢並添加更多的內連接的時間,直到你看到總越來越不正常了。 – Icarus

+0

感謝了一堆,我會繼續前進,再試一次,希望這將解決這個問題。謝謝... – Masriyah

2

我猜你的意思是A.Attented是一點,你希望它是一個int型,因而以後可以聚集?

可以轉換爲位像這樣一個int:

CAST(A.Attented AS INT) 

或在這種情況下:

COALESCE(CAST(A.Attended AS INT), 0) AS Attended 
+0

+1但OP也將需要'COALESCE(SUM'不'COUNT(COALESCE' –