【问题标题】:Adding a SUM() expression causes my Access query to stop working添加 SUM() 表达式会导致我的 Access 查询停止工作
【发布时间】:2013-10-21 08:53:31
【问题描述】:

在将SUM(b.[Amount_withDiscount])inner join on tables 添加到以前工作的查询后,我收到了选择查询的以下错误。现在我希望查询也返回相关表中该列的总和。我哪里出错了?

您尝试执行的查询不包含指定表达式 '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;     

【问题讨论】:

    标签: c# winforms ms-access


    【解决方案1】:

    当您添加 SUM() 表达式时,您将查询从常规选择查询更改为聚合查询,该查询期望每个输出字段都是

    • 聚合函数的一部分(SUM()MAX() 等),或
    • 包含在 GROUP BY 子句中(您的查询中不存在)。

    在这种情况下,只需一笔钱,您最好使用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() 的更多信息,请查看here
    • 是的,你是对的,谢谢 :),你能告诉我一件事吗Dsum 将是什么数据类型格式,我的意思是 int 还是 decimal?因为它向我展示了DataType Mismatch
    • 得到这个错误<target>.Payable Amount and <source>.Payable Amount have conflicting properties: DataType property mismatch.在DataSet中我将此列设置为INT32我也尝试用Decimal设置它
    • @Durga DSum() 应该返回一个与列 [Amount_withDiscount] 相同类型的值,如果没有找到匹配的记录,则返回 DBNull.Value
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多