我有以下几点:
http://sqlfiddle.com/#!6/226ae/1
我现在尝试为一年中的每个星期添加一行,并相应地过滤联系人。CONTACTS有一个datetime列。新表将如下所示:
Status 1 Status 2 Status 3
Week 1 3 4 2
Week 2 1 5 3
Week 3 2 2 4
我认为需要使用DATEADD,但是在如何开始更改查询方面我迷茫了。
我确实知道MySQL具有GROUP BY WEEK命令,但我认为SQL没有等效的命令。做到这一点的最佳方法是什么?
DATEPART()
如果您具有跨多年的数据,则可以使用,按星期和年份进行分组:
SELECT
'Week ' + cast(datepart(wk, created) as varchar(2)) Week,
SUM(case WHEN status = 1 then 1 else 0 end) Status1,
SUM(case WHEN status = 2 then 1 else 0 end) Status2,
SUM(case WHEN status = 3 then 1 else 0 end) Status3,
SUM(case WHEN status = 4 then 1 else 0 end) Status4,
SUM(case WHEN status = 5 then 1 else 0 end) Status5
FROM contacts
group by datepart(wk, created), year(created)
参见带有演示的SQL Fiddle
将年份添加到最终结果中:
SELECT
'Week ' + cast(datepart(wk, created) as varchar(2)) Week,
year(created) year,
SUM(case WHEN status = 1 then 1 else 0 end) Status1,
SUM(case WHEN status = 2 then 1 else 0 end) Status2,
SUM(case WHEN status = 3 then 1 else 0 end) Status3,
SUM(case WHEN status = 4 then 1 else 0 end) Status4,
SUM(case WHEN status = 5 then 1 else 0 end) Status5
FROM contacts
group by datepart(wk, created), year(created)
参见带有演示的SQL Fiddle
问题内容: 我有一个具有此架构的表 我正在尝试使查询工作显示每个月的总数。到目前为止,我已经尝试过DateDiff和嵌套选择,但都没有给我想要的东西。我认为这是最接近的: 但是当我应该获取值时,我只会得到空值。我想念什么吗? 问题答案: 您也可以尝试:
问题内容: 我正在尝试返回一些在滚动12个月内分散的结果,例如: 如何在日期范围内分散结果,并在第一列中填充月份名称? 在MSSQL中,它将类似于: 但这是针对Oracle数据库的,因此DATEPART和DateTime不可用。 我的问题表大致为: 问题答案: 使用: 您还可以使用:
问题内容: 我在SQL Server中有一个日志表,看起来像这样: 我想要的是一个结果列表,该列表表示每天处理了多少种不同的退款,并抛出了所有NULL。 我需要编写什么SQL才能产生这些结果? 问题答案: 我喜欢(MS SQL)中的这种方法:
问题内容: 对于此表: 我需要将具有相同顺序的组相加,以产生此结果。 如何在SQL Server中做到这一点? 注意:该列中的值是连续的。 问题答案: 根据我在您的问题中添加的标签,这是一个空白和孤岛的问题。 效果最好的解决方案可能是 如果值不能保证如所述连续,那么您将需要使用 而是在CTE定义中。 SQL小提琴
问题内容: 我从这样的数据库中提取了数据(为简单起见,将其简化),我想添加一个称为“百分比”的列。 先感谢您 问题答案: 内部选择得到s的和。
问题内容: 我正在使用2个步骤的应用程序。 扫描日志并将其中的数据持久保存在数据库中。 从数据库读取数据并可视化数据。 第一步或多或少已经完成。我尝试通过第二步来解释背景和要求。 数据库中的每一行都包含一些信息,例如logdate,logfilename,LogType,logMessage等。因此,我想例如编写SQL来总结每天的给定LogType。 这是列: 我想如果我想显示Type = TDB