C# SqlClient按日期计数

C# SqlClient按日期计数,c#,sql,sql-server,C#,Sql,Sql Server,我无法向谷歌表达我的问题,以了解如何做到这一点,我希望有人能帮助我 这是我的出发点 SqlCommand command = new SqlCommand("SELECT BOOK_ID, BOOK_DATE, Sum(BOOK_COUNT) " + "FROM BOOKS " + "WHERE (BOOK_ID = '1' OR " +

我无法向谷歌表达我的问题,以了解如何做到这一点,我希望有人能帮助我

这是我的出发点

SqlCommand command = new SqlCommand("SELECT BOOK_ID, BOOK_DATE, Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, BOOK_DATE ", cn);

SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
    int id = (int)reader[0]; 
    DateTime date = (DateTime)reader[1]; 
    int count = (int)reader[2];

    if (id == 1)
    {
       /*...*/
    }

    if (id == 2)
    {
       /*...*/
    }

    if (id == 3)
    {
       /*...*/
    }
 }

 reader.Close();
DBSCA

我想排序的日期,如果日期和id是相同的,那么得到的书籍计数。。。 像这样:

BOOK_DATE  BOOK_ID  BOOK_COUNT  
2014.11.17     1        1         
2014.11.21     2        1           
2014.11.25     2        2           
2014.11.26     1        2           
2014.11.26     3        2           
2014.11.27     3        1           
2014.11.28     3        1           
如果有人能帮我,谢谢,我为英语不好道歉

ORDER BY DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)), Sum(BOOK_COUNT)
DATEADD(dd,0,DATEDIFF(DAY,0,BOOK_DATE))只获取记录的日期部分。您还需要使用此功能进行分组

由于@marc_s的建议而编辑

DATEADD(dd,0,DATEDIFF(DAY,0,BOOK_DATE))只获取记录的日期部分。您还需要使用此功能进行分组

由于@marc_s的建议而编辑

DATEADD(dd,0,DATEDIFF(DAY,0,BOOK_DATE))只获取记录的日期部分。您还需要使用此功能进行分组

由于@marc_s的建议而编辑

DATEADD(dd,0,DATEDIFF(DAY,0,BOOK_DATE))只获取记录的日期部分。您还需要使用此功能进行分组


由于@marc_s

建议按结果集中的第二个值排序而编辑,只需添加
按2排序

SqlCommand command = new SqlCommand("SELECT BOOK_ID, BOOK_DATE, Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, BOOK_DATE 
ORDER BY 2", cn);

要按结果集中的第二个值排序,只需添加
orderby2

SqlCommand command = new SqlCommand("SELECT BOOK_ID, BOOK_DATE, Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, BOOK_DATE 
ORDER BY 2", cn);

要按结果集中的第二个值排序,只需添加
orderby2

SqlCommand command = new SqlCommand("SELECT BOOK_ID, BOOK_DATE, Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, BOOK_DATE 
ORDER BY 2", cn);

要按结果集中的第二个值排序,只需添加
orderby2

SqlCommand command = new SqlCommand("SELECT BOOK_ID, BOOK_DATE, Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, BOOK_DATE 
ORDER BY 2", cn);

这个<编码>将<编码>图书日期转换为<编码>日期,然后在
分组中使用它

SELECT BOOK_ID,
       CONVERT(DATE, BOOK_DATE),
       Sum(BOOK_COUNT)
FROM   BOOKS
WHERE   BOOK_ID IN (1,2,3)
       AND STATUS = 0
GROUP  BY BOOK_ID,
          CONVERT(DATE, BOOK_DATE) 

这个<编码>将<编码>图书日期
转换为<编码>日期,然后在
分组中使用它

SELECT BOOK_ID,
       CONVERT(DATE, BOOK_DATE),
       Sum(BOOK_COUNT)
FROM   BOOKS
WHERE   BOOK_ID IN (1,2,3)
       AND STATUS = 0
GROUP  BY BOOK_ID,
          CONVERT(DATE, BOOK_DATE) 

这个<编码>将<编码>图书日期
转换为<编码>日期,然后在
分组中使用它

SELECT BOOK_ID,
       CONVERT(DATE, BOOK_DATE),
       Sum(BOOK_COUNT)
FROM   BOOKS
WHERE   BOOK_ID IN (1,2,3)
       AND STATUS = 0
GROUP  BY BOOK_ID,
          CONVERT(DATE, BOOK_DATE) 

这个<编码>将<编码>图书日期
转换为<编码>日期,然后在
分组中使用它

SELECT BOOK_ID,
       CONVERT(DATE, BOOK_DATE),
       Sum(BOOK_COUNT)
FROM   BOOKS
WHERE   BOOK_ID IN (1,2,3)
       AND STATUS = 0
GROUP  BY BOOK_ID,
          CONVERT(DATE, BOOK_DATE) 

分组依据
日期时间字段的日期部分:

SqlCommand command = new SqlCommand("SELECT BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)), Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)) 
ORDER BY 2", cn);

分组依据
日期时间字段的日期部分:

SqlCommand command = new SqlCommand("SELECT BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)), Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)) 
ORDER BY 2", cn);

分组依据
日期时间字段的日期部分:

SqlCommand command = new SqlCommand("SELECT BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)), Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)) 
ORDER BY 2", cn);

分组依据
日期时间字段的日期部分:

SqlCommand command = new SqlCommand("SELECT BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)), Sum(BOOK_COUNT) " +
                                    "FROM BOOKS " +
                                    "WHERE (BOOK_ID = '1' OR " +
                                           "BOOK_ID = '2' OR " +
                                           "BOOK_ID = '3' )  " +
                                    "AND STATUS  = '0'    " +
                                    "GROUP BY BOOK_ID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, BOOK_DATE)) 
ORDER BY 2", cn);


仅供参考(1,2,3)
如果
图书ID
是一个数字数据类型(应该是!),那么您不应该在
其中
条款中添加不必要的单引号(应该是!),那么您不应该在
WHERE
clauseFYI较短的符号
WHERE BOOK_ID in(1,2,3)…中添加不必要的单引号。
如果
BOOK_ID
是数字数据类型(应该是!),则不应在
WHERE
clauseFYI较短符号
WHERE BOOK\u ID in(1,2,3)…中添加不必要的单引号。
如果
BOOK\u ID
是数字数据类型(应该是!),那么您不应该在
中添加不必要的单引号,因为在
中,
子句我更喜欢使用
日期添加中的
日期
指示器-它比
dd
明显得多,也更清晰……(这使它更易于维护!)我更喜欢使用
DATEADD
中的
DAY
指示器-它比
dd
更明显、更清晰……(这使它更易于维护!)我更喜欢使用
DATEADD
中的
DAY
指示器-它比
dd
更明显、更清晰……(这使它更易于维护!)我更喜欢使用
DATEADD
中的
DAY
指示器-它比
dd
更明显、更清晰……(这使它更易于维护!)我更喜欢使用
DATEADD
中的
DAY
指示器-它比
dd
更明显、更清晰……(这使它更易于维护!)我更喜欢使用
DATEADD
中的
DAY
指示器-它比
dd
更明显、更清晰……(这使它更易于维护!)我更喜欢使用
DATEADD
中的
DAY
指示器-它比
dd
更明显、更清晰……(这使它更易于维护!)我更喜欢使用
日期添加中的
日期
指示器-它比
dd
更明显、更清晰(这使它更易于维护!)假设?BOOK_ID`是数字的(或应该是数字的),我会避免在
WHERE
子句中添加不必要的单引号…假设?BOOK\u ID`是数字的(或应该是),我会避免在
WHERE
子句中添加不必要的单引号…假设?BOOK\u ID`是数字的(或应该是),我会避免在
WHERE
子句中添加不必要的单引号…假设?BOOK_ID`是数字(或应该是数字),我会避免在
WHERE
子句中添加不必要的单引号。。。