sql-server - 如何按周顺序显示记录

标签 sql-server database sql-server-2008 select stored-procedures

我的表格包含记录数 12000,现在我需要按周显示,如下所示

ID            Date                   count
1       4 week of November 2014       10
2       1 week of December 2014       120
3       2 week of December 2014       60

我尝试过

SELECT CONVERT(VARCHAR(150),datepart(day, datediff(day, 0, date)/7 * 7)/7 + 1) 
+ ' week of ' + CONVERT(VARCHAR(150),datename(month,date)) 
+ ' ' + CONVERT(VARCHAR(150),datepart(YEAR,date))
AS DisplayDate, 
COUNT(date) AS LettersCount
FROM tblV400_Leads_Letters 
WHERE DATEDIFF(DAY,date, GETDATE()) <= 28
GROUP BY date

它给出了 put 作为

 ID            Date                   count
 1    4 week of November 2014          10
 2    2 week of December 2014          74
 3    2 week of December 2014          78
 4    2 week of December 2014          59
 5    1 week of December 2014          79
 6    1 week of December 2014          68
 7    1 week of December 2014          60
 8    1 week of December 2014          68
 9    1 week of December 2014          83

最佳答案

您将按日期列进行分组,这意味着您将为日期的每个不同值获得一条记录输出。确保 GROUP BY 子句中的表达式与您实际输出的表达式完全相同:

SELECT
    CONVERT(VARCHAR(150),datepart(day, datediff(day, 0, date)/7 * 7)/7 + 1) 
+ ' week of ' + CONVERT(VARCHAR(150),datename(month,date)) 
+ ' ' + CONVERT(VARCHAR(150),datepart(YEAR,date))
AS DisplayDate, 
COUNT(date) AS LettersCount
FROM tblV400_Leads_Letters 
WHERE DATEDIFF(DAY,date, GETDATE()) <= 28
GROUP BY
    /* This is simply copied from the SELECT part of the query: */
    CONVERT(VARCHAR(150),datepart(day, datediff(day, 0, date)/7 * 7)/7 + 1) 
+ ' week of ' + CONVERT(VARCHAR(150),datename(month,date)) 
+ ' ' + CONVERT(VARCHAR(150),datepart(YEAR,date))

为了避免重复代码,您可以将所有内容包装在子选择中:

SELECT DisplayDate, COUNT(*) FROM (
    SELECT CONVERT(VARCHAR(150),datepart(day, datediff(day, 0, date)/7 * 7)/7 + 1) 
    + ' week of ' + CONVERT(VARCHAR(150),datename(month,date)) 
    + ' ' + CONVERT(VARCHAR(150),datepart(YEAR,date)) AS DisplayDate
    FROM tblV400_Leads_Letters 
    WHERE DATEDIFF(DAY,date, GETDATE()) <= 28
) T
GROUP BY DisplayDate

另外,我不完全确定此代码的作用:CONVERT(VARCHAR(150),datepart(day, datediff(day, 0, date)/7 * 7)/7 + 1).但如果您想获取周数,一个更简单的解决方案就是使用 datepart(week, date)datepart(iso_wk, date) (如果您居住)在欧洲。

关于sql-server - 如何按周顺序显示记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27421175/

相关文章:

sql-server - LAST_VALUE、CURRENT ROW 和 NULL 出现意外结果

两张表的sql查询

python sqlalchemy没有填写行

sql - 页面刷新时 ASP.Net Web 应用程序中的多个 SQL 通知问题

sql - 无需 PIVOT 运算符即可执行枢转

SQL 函数用 Null 替换 0

sql-server - 如何在 SQLServer 数据库的两个实例之间复制数据记录

java - Spring SimpleCacheManager更新策略?

mysql - 试图从 SQL Server 2008 二进制类型中提取数据

sql - 使用千位分隔符格式化 COUNT 结果的更简洁方法?