小编Erd*_* Ay的帖子

在多个数据维度上分组(透视)

我正在记录一个事件表,并且想要一个输出(如本答案底部所示),问题是我正在获取行中的数据,但希望它们按列显示。

两个维度如下:

  • 日期时间值(每天)
  • ServerId(每个服务器)

我想我必须按时间部分(例如按分钟或每小时)对日期时间值进行分组并检索每个服务器的事件列表,但我不知道如何编写查询?我需要一个by子句吗?

我已经写好了create语句,结构如下:

CREATE TABLE [dbo].[events](
    [guidEventId] [uniqueidentifier] PRIMARY KEY,
    [dtStart] [datetime2](7) NOT NULL,
    [nDirection] [int] NOT NULL,
    [nServerId] [int] NOT NULL
) 

INSERT INTO events 
    ([guidEventId],[dtStart],[nDirection],[nServerId])
VALUES
    (newId(),'2013-08-01 00:01:00','0','1'),
    (newId(),'2013-08-01 00:02:00','1','1'),
    (newId(),'2013-08-01 00:03:00','0','1'),
    (newId(),'2013-08-01 00:04:00','1','2'),
    (newId(),'2013-08-02 00:01:00','0','1'),
    (newId(),'2013-08-02 00:02:00','1','2'),
    (newId(),'2013-08-02 00:03:00','0','2'),
    (newId(),'2013-08-02 00:04:00','1','2');
Run Code Online (Sandbox Code Playgroud)

http://sqlfiddle.com/#!6/25e74

茶几应该看起来像这样(白天):

DateTime     | Server1 | Server2 |     Sum |
--------------------------------------------
2013-08-01   |       3 |       1 |       4 |
2013-08-02   |       1 |       3 |       4 |
Run Code Online (Sandbox Code Playgroud)

sql-server group-by datetime

2
推荐指数
1
解决办法
1763
查看次数

SQL Server 2008 的 DATETIME2FROMPARTS 替代方案

我正在尝试将日期时间值分开并将其构建在一起以删除分钟、秒等。我希望值是每小时一次。

通常这适用于 SQL Server 2012 机器:

DATETIME2FROMPARTS( DATEPART(year, datum), DATEPART(month, datum), DATEPART(day, datum), DATEPART(hour, datum), 0, 0, 0, 0) as dtHour
Run Code Online (Sandbox Code Playgroud)

但不幸的是在 SQL Server 2008 中它没有!我需要哪个功能才能完成相同的工作?

我还查找了此参考资料:Date&Time functions但这都仅与 SQL Server 2012 兼容。

sql-server date-format datetime

2
推荐指数
1
解决办法
405
查看次数

标签 统计

datetime ×2

sql-server ×2

date-format ×1

group-by ×1