SQL Server 2008を使用しており、列を個々の行に分割するクエリを作成しようとしています。私はカウントデータを引き出し、それを個々の得点に変換する必要があります。SQL:UN-PIVOTおよび個別スコア別
例:
5学生は「常に」と答えと「いつも」= 3ポイントの答え。
4人の学生が「普通」と答え、「通常」= 2点の回答
「常時」という名前のフィールドが5つのフィールドと「通常」という名前のフィールドの代わりに4とカウントされます'スコア'という3つの行と4行の5行の2つのフィールドを持つようになりました。
私はUNPIVOTを使用してクエリを開始しましたが、説明どおりにデータを分割しません。サンプルデータと私の望む結果を以下に掲載しました。どんな助けもありがとう。
Always = 3 points
Usually = 2 points
Sometimes = 1 points
Never = 0 points
サンプルデータ:
CREATE TABLE #TEST(QUESTION VARCHAR(15), STUDENT VARCHAR(15), STARTDATE DATE, ALWAYS INT, USUALLY INT, SOMETIMES INT, NEVER INT)
INSERT #TEST(QUESTION, STUDENT, STARTDATE, ALWAYS, USUALLY, SOMETIMES, NEVER)
VALUES
('A','BOB','01/01/2016',2,1,1,2),
('A','BOB','03/01/2016',3,1,1,0),
('A','JIM','01/01/2016',2,1,2,0),
('A','JIM','03/01/2016',4,1,0,0),
('BB','BOB','03/01/2016',2,1,1,2),
('BB','BOB','07/01/2016',3,1,1,0),
('BB','JIM','03/01/2016',2,1,2,0),
('BB','JIM','07/01/2016',4,1,0,0)
問合せ:
WITH A AS (
SELECT *
FROM #TEST
--WHERE
-- QUESTION = 'A'
--AND STUDENT IN ('BOB','JIM')
--AND STARTDATE = '2016-01-01'
)
SELECT QUESTION, STUDENT, STARTDATE, SCORE
FROM
( SELECT QUESTION, STUDENT, STARTDATE, ALWAYS, USUALLY, SOMETIMES, NEVER
FROM A
) P
UNPIVOT
(SCORE FOR Z IN (ALWAYS, USUALLY, SOMETIMES, NEVER)
) AS unpvt
期待される結果:第一のための2行
QUESTION|STUDENT|STARTDATE|SCORE|
--------+-------+---------+-----+
A |BOB |1/1/2016 |3 |--ALWAYS
A |BOB |1/1/2016 |3 |--ALWAYS
A |BOB |1/1/2016 |2 |--USUALLY
A |BOB |1/1/2016 |1 |--SOMETIMES
A |BOB |1/1/2016 |0 |--NEVER
A |BOB |1/1/2016 |0 |--NEVER
A |BOB |3/1/2016 |3 |--ALWAYS
A |BOB |3/1/2016 |3 |--ALWAYS
A |BOB |3/1/2016 |3 |--ALWAYS
A |BOB |3/1/2016 |2 |--USUALLY
A |BOB |3/1/2016 |1 |--SOMETIMES
助けてくれてありがとう、あなたの提案は私のサンプルデータセットのために動作します。あなたはこれを説明することができますか?JOIN(選択トップ100 N = ROW_NUMBER()オーバー(注文番号から)マスター... spt_values) "?私はこのテーブルが使われたことを一度も見たことがなく、なぜそれを使用したのか、トップ100を選択したのか理解していません。 – JBritton
@JBritton 100レコードのアドホック・タリー/これにより、レコードセットの「拡張」が可能になります。 –
@JBrittonトップ100は任意の値でした。あなたが10の反応以上のものを見たことがないなら、それをトップ10にします。それはより大きな価値を持つ害はありません。サブクエリは1回解決されます –