我有一张桌子:
CREATE TABLE StatusStats (
UserID VARCHAR(50),
StatusCategory VARCHAR(50),
StatusDuration INT
)
对于每个用户,它包含它们的时间(StatusCategory)
(fyi ...状态持续时间以秒为单位)
这是唯一的3个值。
为了在使用JOIN到其他表的报告中使用此数据,我需要将该数据复制到此表中:
CREATE TABLE StatusStatsByUser (
UserID VARCHAR(50),
Productive INT,
NonProductive INT,
Unknown INT
)
这将在每列中包含StatusDuration列中相应值的StatusDuration列中的值。
我无法弄清楚如何使用SQL Server 2008R2编写SQL代码。非常感激您的帮忙。
答案 0 :(得分:1)
也许是这样的:
INSERT INTO StatusStatsByUser
SELECT UserId ,
SUM(CASE WHEN StatusCategory = 'Productive' THEN StatusDuration
ELSE 0
END) AS Productive ,
SUM(CASE WHEN StatusCategory = 'NonProductive' THEN StatusDuration
ELSE 0
END) AS NonProductive ,
SUM(CASE WHEN StatusCategory = 'Unknown' THEN StatusDuration
ELSE 0
END) AS Unknown
FROM StatusStats
GROUP BY UserId
答案 1 :(得分:1)
无需将此数据存储在表格中,您可以轻松创建PIVOT
数据到您需要的列中的视图:
CREATE VIEW yourPivotedView
AS
select userid, Productive, NonProductive, Unknown
from
(
select userid, StatusCategory, StatusDuration
from StatusStats
) src
pivot
(
sum(StatusDuration)
for StatusCategory in (Productive, NonProductive, Unknown)
) piv
一旦在视图中,您就可以与其他表一起加入:
select *
from yourtable t1
inner join yourPivotedView p
on t1.userid = p.userid
但是如果你必须将它插入到新表中,你可以使用:
insert into StatusStatsByUser (userid, Productive, NonProductive, Unknown)
select userid, Productive, NonProductive, Unknown
from
(
select userid, StatusCategory, StatusDuration
from StatusStats
) src
pivot
(
sum(StatusDuration)
for StatusCategory in (Productive, NonProductive, Unknown)
) piv