在日期之间获取值时出错

时间:2013-07-25 18:50:51

标签: c# asp.net sql-server

我正在尝试获取图表日期与患者数量。我正在尝试使用asp.net中的MS Chart制作图表,其中我获取x轴上的日期和y轴上的患者数量。 我接受日期和日期作为输入。我希望在每个日期之间的这两个日期之间有多少患者。我正在尝试以下内容

select 
convert(varchar,creation_Date,105) as 'creation_Date',
count(Pat_ID)
FROM Patient_Ref_master
where         
 (CONVERT(VARCHAR(10),Patient_Ref_master.creation_Date,111)  BETWEEN '2013/07/23' AND '2013/07/25')

group by Pat_ID

但是给我一个错误

Msg 8120, Level 16, State 1, Line 1
Column 'Patient_Ref_master.creation_Date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

我哪里出错。?请建议。 感谢

4 个答案:

答案 0 :(得分:3)

creation_Date分组,而不是Pat_ID

答案 1 :(得分:1)

您还应该在Group By子句中包含Creation_Date。以下是正确的查询:

    select 
convert(varchar,creation_Date,105) as 'creation_Date',
count(Pat_ID)
FROM Patient_Ref_master
where         
 (CONVERT(VARCHAR(10),Patient_Ref_master.creation_Date,111)  BETWEEN '2013/07/23' AND '2013/07/25')

group by creation_Date

答案 2 :(得分:1)

您希望计算患者的日期,因此日期需要在group by子句中。但是,您需要确定它实际上是date而不是datetime。以下使用您的首选格式:

select convert(varchar,creation_Date, 105) as 'creation_Date',
       count(Pat_ID) as Numpateitns
FROM Patient_Ref_master
where CONVERT(VARCHAR(10),Patient_Ref_master.creation_Date, 111)  BETWEEN '2013/07/23' AND '2013/07/25'
group by convert(varchar,creation_Date, 105)

答案 3 :(得分:1)

您不会按Pat_ID分组,您希望按creation_Date分组,或者您的表达式是creation_Date。另外,我不会将你的日期转换为你的where子句中的varchars。只需将它们保留为日期时间。

select 
convert(varchar,creation_Date,105) as 'creation_Date',
count(Pat_ID)
FROM Patient_Ref_master
where Patient_Ref_master.creation_Date >= convert(datetime,'2013/07/23') 
AND Patient_Ref_master.creation_Date < dateadd(day,1,convert(datetime,'2013/07/25'))
group by convert(varchar,creation_Date,105)