0

私はテーブルを持っています:

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
)

これには、各列に、StatusCategory列の対応する値のStatusDuration列にあった値が含まれます。

SQL Server 2008R2を使用して、それを行うためのSQLコードを作成する方法がわかりません。あなたの助けは非常にありがたいです。

4

2 に答える 2

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
于 2012-12-18T20:14:18.487 に答える
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
于 2012-12-18T20:18:21.120 に答える