C# 添加SUM()表达式会导致Access查询停止工作

C# 添加SUM()表达式会导致Access查询停止工作,c#,winforms,ms-access,C#,Winforms,Ms Access,在将SUM(b.[Amount\u withDiscount])和表上的内部联接添加到以前有效的查询后,Select查询出现以下错误。现在,我希望查询还返回相关表中该列的总和。我哪里出错了 您试图执行的查询未将指定的表达式“p.[PFirstName]&”&p.[PLastName]”作为聚合函数的一部分 工作查询 string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[

在将
SUM(b.[Amount\u withDiscount])
表上的内部联接添加到以前有效的查询后,Select查询出现以下错误。现在,我希望查询还返回相关表中该列的总和。我哪里出错了

您试图执行的查询未将指定的表达式“p.[PFirstName]&”&p.[PLastName]”作为聚合函数的一部分

工作查询

string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[BirthDate],p.[MobileNo]&' / '&p.[LandlineNo] as [Contact Number] FROM Patient_Registration p WHERE datepart('m',p.[RegDate])=@month AND datepart('yyyy',p.[RegDate])=@year AND p.DoctorID=" + drId;   
string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[BirthDate],p.[MobileNo]&' / '&p.[LandlineNo] as [Contact Number], SUM(b.[Amount_withDiscount]) as [Payable Amount] FROM Patient_Registration p INNER JOIN Bill_Master b on p.[PatientID]=b.[Patient_ID] WHERE datepart('m',p.[RegDate])=@month AND datepart('yyyy',p.[RegDate])=@year AND p.DoctorID=" + drId;     
添加总和和内部联接后的查询

string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[BirthDate],p.[MobileNo]&' / '&p.[LandlineNo] as [Contact Number] FROM Patient_Registration p WHERE datepart('m',p.[RegDate])=@month AND datepart('yyyy',p.[RegDate])=@year AND p.DoctorID=" + drId;   
string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[BirthDate],p.[MobileNo]&' / '&p.[LandlineNo] as [Contact Number], SUM(b.[Amount_withDiscount]) as [Payable Amount] FROM Patient_Registration p INNER JOIN Bill_Master b on p.[PatientID]=b.[Patient_ID] WHERE datepart('m',p.[RegDate])=@month AND datepart('yyyy',p.[RegDate])=@year AND p.DoctorID=" + drId;     

添加
SUM()
表达式时,您将查询从常规的Select查询更改为聚合查询,该查询要求每个输出字段

  • 聚合函数的一部分(
    SUM()
    MAX()
    等),或
  • 包含在GROUPBY子句中(该子句不在查询中)
在这种情况下,对于一个求和,您最好使用
DSum()
而不是
sum()
,如中所示

string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[BirthDate],p.[MobileNo]&' / '&p.[LandlineNo] as [Contact Number], DSum(\"Amount_withDiscount\",\"Bill_Master\",\"Patient_ID=\" & p.[PatientID]) as [Payable Amount] FROM Patient_Registration p WHERE datepart('m',p.[RegDate])=@month AND datepart('yyyy',p.[RegDate])=@year AND p.DoctorID=" + drId;     

添加
SUM()
表达式时,您将查询从常规的Select查询更改为聚合查询,该查询要求每个输出字段

  • 聚合函数的一部分(
    SUM()
    MAX()
    等),或
  • 包含在GROUPBY子句中(该子句不在查询中)
在这种情况下,对于一个求和,您最好使用
DSum()
而不是
sum()
,如中所示

string sql = "SELECT p.[PFirstName]&' '&p.[PLastName] as [Patient Name],p.[Age],p.[BirthDate],p.[MobileNo]&' / '&p.[LandlineNo] as [Contact Number], DSum(\"Amount_withDiscount\",\"Bill_Master\",\"Patient_ID=\" & p.[PatientID]) as [Payable Amount] FROM Patient_Registration p WHERE datepart('m',p.[RegDate])=@month AND datepart('yyyy',p.[RegDate])=@year AND p.DoctorID=" + drId;     

那么如何在这个查询中编写内部联接呢?@Durga如果使用
DSum()
,则不需要在主查询中进行联接
DSum()
是一个域聚合函数,它执行自己的子查询。有关
DSum()
的更多信息,请看。是的,你是对的,谢谢:),你能告诉我另一件事吗
DSum
将采用什么数据类型格式,我指的是int或decimal?因为它向我显示数据类型不匹配
获取此错误
。应付金额和.应付金额具有冲突的属性:数据类型属性不匹配。
在数据集中,我已将此列设置为
INT32
我尝试将其设置为
十进制
also@Durga
DSum()
应该返回与列[Amount_withDiscount]类型相同的值,或者如果找不到匹配的记录,则返回
DBNull.value
值。如何在该查询中写入内部联接?如果使用
DSum()
则不需要在主查询中进行联接
DSum()
是一个域聚合函数,它执行自己的子查询。有关
DSum()
的更多信息,请看。是的,你是对的,谢谢:),你能告诉我另一件事吗
DSum
将采用什么数据类型格式,我指的是int或decimal?因为它向我显示数据类型不匹配获取此错误
。应付金额和.应付金额具有冲突的属性:数据类型属性不匹配。
在数据集中,我已将此列设置为
INT32
我尝试将其设置为
十进制
also@Durga
DSum()
应返回与列[Amount_withDiscount]类型相同的值,或者如果未找到匹配记录,则返回
DBNull.value