Stored procedures 在存储过程中强制转换合并为INT

Stored procedures 在存储过程中强制转换合并为INT,stored-procedures,casting,Stored Procedures,Casting,我目前有一个存储过程,它返回数据并显示在我的报表查看器中,但我的问题是我要检查学生是否上课,我有 COALESCE(A.Attended, 0)AS Attended 如果他们参加了,则返回1,如果没有,则返回0。在我的报告中,仅显示1或0,即使他们可能参加过多次。如何将其转换为整数以获得正确的总数 谢谢 整个查询: SELECT P.PartyId, COUNT(COALESCE(A.Attended, 0))AS Attended, COUNT(DISTINCT

我目前有一个存储过程,它返回数据并显示在我的报表查看器中,但我的问题是我要检查学生是否上课,我有

COALESCE(A.Attended, 0)AS Attended
如果他们参加了,则返回1,如果没有,则返回0。在我的报告中,仅显示1或0,即使他们可能参加过多次。如何将其转换为整数以获得正确的总数

谢谢

整个查询:

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
选择
P.PartyId,
计数(合并(A.Attended,0))为有出席,
将(不同的H.HearingId)计算为听证会,
O.OfficeName作为OfficeName,
公司名称,
P.FirstName作为FirstName,
P.LastName作为LastName,
P.出生日期为出生日期
来自活动A
A.ActivityTypeId=AT.ActivityTypeId上的内部联接ActivityType AT
A.ActivityEntryId=AE.ActivityEntryId上的内部联接ActivityEntry AE
内部连接HearingEntryId=HE.HearingEntryId
HE.HearingEntryId=H.HearingEntryId上的内部连接听力H
H.CaseId=C.CaseId上的内部联接[Case]C
在C.CaseId=CO.CaseId和AE.OfficeId=CO.OfficeId上内部连接CaseOffice CO
内部连接办公室O ON CO.OfficeId=O.OfficeId
H.HearingId=A.HearingId上的内部联接
A.PartyId=P.PartyId上的内部联接方P

其中HP.PartyId=P.PartyId和AE.OfficeId=@OfficeId和(H.HearingDate>=@BeginDate和(H.HearingDate

我猜你的意思是A.Attented有点,你希望它是int,以便以后可以聚合

您可以将一点转换为int,如下所示:

CAST(A.Attented AS INT)
或者在这种情况下:

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

我猜你的意思是A.Attented有点,你希望它是一个int,以便以后可以聚合

您可以将一点转换为int,如下所示:

CAST(A.Attented AS INT)
或者在这种情况下:

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

你需要按出席人数计算总数

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
选择
P.PartyId,
(总和(合并(A.Attended,0)))作为出席,
将(不同的H.HearingId)计算为听证会,
O.OfficeName作为OfficeName,
公司名称,
P.FirstName作为FirstName,
P.LastName作为LastName,
P.出生日期为出生日期
来自活动A
A.ActivityTypeId=AT.ActivityTypeId上的内部联接ActivityType AT
A.ActivityEntryId=AE.ActivityEntryId上的内部联接ActivityEntry AE
内部连接HearingEntryId=HE.HearingEntryId
HE.HearingEntryId=H.HearingEntryId上的内部连接听力H
H.CaseId=C.CaseId上的内部联接[Case]C
在C.CaseId=CO.CaseId和AE.OfficeId=CO.OfficeId上内部连接CaseOffice CO
内部连接办公室O ON CO.OfficeId=O.OfficeId
H.HearingId=A.HearingId上的内部联接
A.PartyId=P.PartyId上的内部联接方P

其中HP.PartyId=P.PartyId和AE.OfficeId=@OfficeId和(H.HearingDate>=@BeginDate和(H.HearingDate

),您需要按出席人数求和

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
选择
P.PartyId,
(总和(合并(A.Attended,0)))作为出席,
将(不同的H.HearingId)计算为听证会,
O.OfficeName作为OfficeName,
公司名称,
P.FirstName作为FirstName,
P.LastName作为LastName,
P.出生日期为出生日期
来自活动A
A.ActivityTypeId=AT.ActivityTypeId上的内部联接ActivityType AT
A.ActivityEntryId=AE.ActivityEntryId上的内部联接ActivityEntry AE
内部连接HearingEntryId=HE.HearingEntryId
HE.HearingEntryId=H.HearingEntryId上的内部连接听力H
H.CaseId=C.CaseId上的内部联接[Case]C
在C.CaseId=CO.CaseId和AE.OfficeId=CO.OfficeId上内部连接CaseOffice CO
内部连接办公室O ON CO.OfficeId=O.OfficeId
H.HearingId=A.HearingId上的内部联接
A.PartyId=P.PartyId上的内部联接方P

其中HP.PartyId=P.PartyId和AE.OfficeId=@OfficeId和(H.HearingDate>=@BeginDate和(H.HearingDate请发布您的整个查询。您将需要某种聚合查询。这听起来像是查询中的错误,而不是合并或转换。完整查询是什么?您是否验证了实际参加人数不是1?@MartinSmith I继续添加了查询请发布您的整个查询。您将需要某种聚合查询。T他的声音听起来像是查询中的一个错误,而不是合并或铸造。完整的查询是什么?您是否验证了acutal A.Attended不是1?@MartinSmith I继续添加了查询+1,但OP也需要
合并(SUM
计数(COALESCE
+1,但OP也需要
合并(SUM
计数(COALESCE
谢谢,我认为现在看起来不错,但出现了一个新问题,也许就如何解决这个问题提出了一些建议会很好。现在我得到的出席人数比听证会的人数多。这是不对的,因为听证会是总人数,因此出席人数应该等于或小于一年内可能举行的听证会party.@Amina这意味着您的一些内部联接正在扭曲结果。我不能告诉您是哪一个,因为我不知道架构和数据。我的建议是,您可以从一个内部联接开始进行故障排除,运行查询,然后一次添加一个内部联接,直到您看到总数出现异常。非常感谢,我将继续尝试一下,希望这能解决问题。再次感谢…谢谢,我认为现在看起来不错,但出现了一个新问题,也许一些关于如何解决的建议会很好。现在我得到的出席人数比听证会的人数多。这是不对的,因为听证会是总数,因此出席人数应该是等于或小于一个参与方可能的连接数。@Amina这意味着某些内部连接会扭曲结果。我无法告诉您是哪一个,因为我不知道架构和数据。我的建议是,通过从一个内部连接开始进行故障排除,运行查询,然后一次再添加一个内部连接,直到看到总数到达哪里为止ing出了问题。非常感谢。我会继续尝试,希望这能解决问题。再次感谢。。。