C# 获取日期之间的值时出错

C# 获取日期之间的值时出错,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在尝试获取图表日期与患者数量的关系。我正在尝试使用asp.net中的MS chart制作一个图表,其中我在x轴上获取日期,在y轴上获取患者数量。 我接受from date和to date作为输入。我想要这两个日期之间的患者数量,从开始到结束的每个日期。我试着做如下的事情 select convert(varchar,creation_Date,105) as 'creation_Date', count(Pat_ID) FROM Patient_Ref_master where

我正在尝试获取图表日期与患者数量的关系。我正在尝试使用asp.net中的MS chart制作一个图表,其中我在x轴上获取日期,在y轴上获取患者数量。 我接受from date和to 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 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.
我错在哪里。?请建议。
谢谢

您还应该在group By子句中有创建日期。以下是正确的查询:

    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

在GROUPBY子句中还应该有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

分组依据
创建日期
而不是
Pat\u ID

分组依据
创建日期
而不是
Pat\u ID

您希望在某个日期统计患者,因此该日期需要在
分组依据
子句中。但是,对于您正在做的事情,您需要确保它确实是一个
日期
,而不是
日期时间
。以下内容使用您的首选格式:

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)

您希望在某个日期计算患者数,因此该日期需要在
group by
子句中。但是,对于您正在做的事情,您需要确保它确实是一个
日期
,而不是
日期时间
。以下内容使用您的首选格式:

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)

您不会按Pat_ID进行分组,而是希望按创建日期或表达式(即创建日期)进行分组。另外,我不会在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)
选择
将(varchar,创建日期,105)转换为“创建日期”,
计数(Pat_ID)
来自患者参考大师
其中Patient\u Ref\u master.creation\u Date>=转换(日期时间,'2013/07/23')
和患者参考主控台创建日期<日期添加(日期,1,转换(日期时间,'2013/07/25'))
按转换分组(varchar,创建日期,105)

您不会按Pat\u ID分组,而是要按创建日期分组,或者按您的表达式(即创建日期)分组。另外,我不会在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)
选择
将(varchar,创建日期,105)转换为“创建日期”,
计数(Pat_ID)
来自患者参考大师
其中Patient\u Ref\u master.creation\u Date>=转换(日期时间,'2013/07/23')
和患者参考主控台创建日期<日期添加(日期,1,转换(日期时间,'2013/07/25'))
按转换分组(varchar,创建日期,105)

太好了,索纳姆……它成功了。你能告诉我哪里出了问题吗?你应该在group by子句中包含创建日期,而不是Pat_Id。太好了,Sonam…成功了。你能告诉我哪里出错了吗?你应该在group by子句中有创建日期,而不是Pat_Id。为什么,为什么,为什么要转换为字符串为什么,为什么要转换为字符串