VB中的SQL语句运行时异常(ASP.NET)

时间:2011-12-05 23:19:47

标签: asp.net sql vb.net

我有这个SQL语句:

de.SqlStatement = "SELECT A.Name, A.Catagory , COUNT(Patient_ID) AS PNO FROM PatientApplyToAssociation P INNER JOIN Association A on A.Association_ID = P.Association_ID WHERE A.Catagory='" & "health" & " '" & "' GROUP BY A.Name '"

有这个例外:

  

System.Data.SqlClient.SqlException未被用户代码
处理   类= 16
  错误码= -2146232060
  LineNumber上= 1
  消息=列   'Association.Name'在选择列表中无效,因为它不是   包含在聚合函数或GROUP BY子句中。

当我添加了where子句时,我遇到了这个异常,似乎编译器看不到Group By Section,因为它之前的引用结束了,我试着这样写:

de.SqlStatement = "SELECT A.Name, A.Catagory , COUNT(Patient_ID) AS PNO FROM PatientApplyToAssociation P INNER JOIN Association A on A.Association_ID = P.Association_ID WHERE A.Catagory='" & "health" & "' GROUP BY A.Name '" & " '"

但它是Incorrect syntax near ' '

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我很确定你不希望在'条款周围GROUP BY

SELECT A.Name, A.Catagory
     , COUNT(Patient_ID) AS PNO 
  FROM PatientApplyToAssociation P 
 INNER JOIN Association A 
    ON A.Association_ID = P.Association_ID 
 WHERE A.Catagory='" & "health" & " '" & " GROUP BY A.Name

答案 1 :(得分:2)

要使用原始问题中的陈述,您需要将其修改为:

de.SqlStatement = "SELECT A.Name, A.Catagory, COUNT(1) AS PNO FROM PatientApplyToAssociation P INNER JOIN Association A on A.Association_ID = P.Association_ID WHERE A.Catagory='health' GROUP BY A.Name, A.Catagory"

此声明中有3项更改:

1)已删除where和group by中的无关字符串连接。

2)已添加A.Catagory分组,这样您就不会收到与此字段问题中的错误类似的其他错误。

3)COUNT(Patient_ID)已更改为COUNT(1),可能是更好的做法。如果您计算的字段包含空值,则它不会包含在计数中。如果这是所需的行为,那么您之前的代码是正确的;否则你应该使用修订。