22,209
社区成员
发帖
与我相关
我的任务
分享
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[CREATED] DATETIME
,[PROFIT] DECIMAL(10,3)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'2018-11-27 05:00',N'11.00')
INSERT INTO dbo.[t] VALUES(N'2018-11-28 06:00',N'5.00')
INSERT INTO dbo.[t] VALUES(N'2018-11-28 09:00',N'1.00')
INSERT INTO dbo.[t] VALUES(N'2018-11-28 12:00',N'2.00')
INSERT INTO dbo.[t] VALUES(N'2018-11-28 12:20',N'6.00')
GO
SELECT
CONVERT(CHAR(10),[CREATED],120) AS [date]
,SUM(CASE WHEN DATEPART(hour,[CREATED]) BETWEEN 0 AND 8 THEN [PROFIT] ELSE 0 END) AS [0-8]
,SUM(CASE WHEN DATEPART(hour,[CREATED]) BETWEEN 9 AND 18 THEN [PROFIT] ELSE 0 END) AS [9-18]
,SUM(CASE WHEN DATEPART(hour,[CREATED]) BETWEEN 19 AND 23 THEN [PROFIT] ELSE 0 END) AS [19-23]
FROM t
GROUP BY CONVERT(CHAR(10),[CREATED],120)
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([CREATED] DATETIME,[PROFIT] decimal(18,8))
Insert #T
select N'2018-11-27 05:00',11.00 union all
select N'2018-11-28 06:00',5.00 union all
select N'2018-11-28 09:00',1.00 union all
select N'2018-11-28 12:00',2.00 union all
select N'2018-11-28 12:20',6.00
Go
--测试数据结束
SELECT CONVERT(CHAR(10),CREATED,120) 日期 ,
SUM(CASE WHEN
CONVERT(CHAR(8),CREATED,108) BETWEEN '00:00' AND '07:00'
THEN PROFIT
ELSE 0
END) [时间段0-7点 ],
SUM(CASE WHEN
CONVERT(CHAR(8),CREATED,108) BETWEEN '09:00' AND '18:00'
THEN PROFIT
ELSE 0
END) [时间段9-18点 ] ,
SUM(CASE WHEN
CONVERT(CHAR(8),CREATED,108) BETWEEN '19:00' AND '23:00'
THEN PROFIT
ELSE 0
END) [时间段19-23点 ]
FROM #T
GROUP BY CONVERT(CHAR(10),CREATED,120)