刚一上班就碰到个问题,要我把任意时间段的数据按
年、月、日、小时、分种任意格式来汇总,搞了半天终于写出来了,奉献给新手们看看还行吗
SELECT
CONVERT
(
CHAR
(10
),
[
OrderTime
]
,
120
)
[
time
]
,USD,EUR,GBP,CAD,AUD,HKD
INTO
#F
FROM
Paypal
WHERE
DATEDIFF
(
DAY
,OrderTime,
@date
)
=
0
AND
PaypalState
=
'
Completed
'
这个查询是用来把指定那天的所有记录查询到临时表
#F中,最关键就是SELECT语句里面的Convert函数,你把CHAR的值设多长,比如说你想基于YYYY-MM月查询
就应该写成CHAR(7),为什么呢?因为当你把Datetime转化成字符串的过程中,CHAR(7)把后面多余的字符截取掉了,得到了你想要的日期格式。这样再GROUP BY
这个新生成的列,就是按月的汇总,按此推理YYYY-MM-DD就是CHAR(10),YYYY-MM-DD HH就是CHAR(13),YYYY-MM-DD HH:mi就是CHAR(16)
SELECT
[
time
]
,
'
USD
'
=
SUM
(USD)
*
@USD
,
'
EUR
'
=
SUM
(EUR)
*
@EUR
,
'
GBP
'
=
SUM
(GBP)
*
@GBP
,
'
CAD
'
=
SUM
(CAD)
*
@CAD
,
'
AUD
'
=
SUM
(AUD)
*
@AUD
,
SUM
(HKD)
*
@HKD
[
HKD
]
,
'
Quantity
'
=
Count
(
*
),
(
SUM
(USD)
*
@USD
+
SUM
(EUR)
*
@EUR
+
SUM
(GBP)
*
@GBP
+
SUM
(CAD)
*
@CD
+
SUM
(AUD)
*
@AUD
+
SUM
(HKD)
*
@HKD
)
[
CNY
]
FROM
#F
GROUP
BY
[
time
]
DROP
TABLE
#F
你看我基于每天的每小时的汇总,就是这样实现的,假如你有更好的办法,赶快给我拍砖啊