这是一个T-SQL查询:
SELECT
A.DateStamp,
CASE WHEN A.T = 10 THEN A.counts END AS HT,
CASE WHEN A.T = 98 THEN A.counts END AS BP,
CASE WHEN A.T = 94 THEN A.counts END AS MP,
CASE WHEN A.T = 12 THEN A.counts END AS SP
FROM
A
WHERE
(A.date_time BETWEEN GETDATE() - 60 AND GETDATE() - 30) -- say
--GROUP BY A.DateStamp,A.T,A.counts
ORDER BY
CONVERT(DATE, A.DateStamp) ASC
效果很好。以前我使用的是表A的多个副本,所有人都加入了。在这里结果是正确的,但分成多行,如:
date | BP | MP | SP | HT |
-----------+----+----+----+----+
22/10/2017 12 34 56 78
Looks Like -- -- -- --
22/10/2017 12 -- -- --
22/10/2017 -- 34 -- --
22/10/2017 -- -- 56 --
22/10/2017 -- -- -- 78
答案 0 :(得分:2)
您需要使用条件聚合,GROUP BY
仅使用DateStamp
字段:
SELECT A.DateStamp,
SUM(CASE WHEN A.T=10 THEN A.counts ELSE 0 END) AS HT,
SUM(CASE WHEN A.T=98 THEN A.counts ELSE 0 END) AS BP,
SUM(CASE WHEN A.T=94 THEN A.counts ELSE 0 END) AS MP,
SUM(CASE WHEN A.T=12 THEN A.counts ELSE 0 END) AS SP
FROM A
WHERE (A.date_time BETWEEN getdate()-60 AND getdate()-30)
GROUP BY A.DateStamp
ORDER BY convert(date,A.DateStamp) ASC
答案 1 :(得分:1)
我猜您只需按日期分组
SELECT convert(date,A.DateStamp) AS Date,
SUM(CASE WHEN A.T=10 THEN A.counts END) AS HT ,
SUM(CASE WHEN A.T=98 THEN A.counts END) AS BP,
SUM(CASE WHEN A.T=94 THEN A.counts END) AS MP,
SUM(CASE WHEN A.T=12 THEN A.counts END) AS SP
FROM A
WHERE A.date_time BETWEEN getdate()-60 AND getdate()-30
GROUP BY convert(date,A.DateStamp)
ORDER BY convert(date,A.DateStamp) ASC