2017-01-27 17 views
1

ここで初心者ですが、うまくいけば、これはあまりにも疑問の愚かではありません。私は、SQLデータベースに実験室のサンプルのテーブルを持っています。 Sample_IDs、Test_Names、Subtest_Names、およびResultsが含まれます。SQLサブカテゴリを扱う方法

SELECT Sample, Test, Subtest, Result 
    FROM table 
WHERE Sample = 'list of sample #s' 

をそして、これは次のような結果になります:私の現在の単純なSQLクエリは次のように

SAMPLE TEST SUBTEST RESULT 
XX01 Test1 Test1Sub1 1 
XX02 Test1 Test1Sub1 2 
XX03 Test1 Test1Sub1 3 
XX03 Test2 Test2Sub1 4 
XX03 Test3 Test3Sub1 5 
XX03 Test3 Test3Sub2 6 
XX03 Test3 Test3Sub3 7 
XX03 Test4 Test4Sub1 8 
XX03 Test4 Test4Sub2 9 
XX03 Test4 Test4Sub3 10 

をしかし、私はユニークSample_IDで一覧表示し、列としてサブテストをリストするテーブルを探しています。私は、私が照会で指定できるように、私が探しているサブテストの名前を知っています。たとえば、私は上記の結果を代わりに次のようにしたいと考えています:

Test1Sub1 Test2Sub1 Test3Sub1 Test3Sub2 Test3Sub3 Test4Sub1 Test4Sub2 Test4Sub3 
XX01 1       
XX02 2       
XX03 3   4   5   6   7   8   9   10 

誰かがSQLコードを手伝ってくれますか?私はいくつかの捜索をしましたが、私が探していた答えを見つけるのに十分なほど詳しくはまだ分かっていません。ありがとう!ここで

+0

サブテストの数(この例では8)は固定されていますか? –

+0

@ koenig26はご使用の環境のSQL Serverですか? –

+0

@zagglerここでは、MySQLタグを削除するのが正しいかどうかわかりません。 OPがそのデータベースにタグを付けました。 – Taryn

答えて

0
CREATE TABLE #Test 
(SAMPLE VARCHAR(100), TEST VARCHAR(100), SUBTEST VARCHAR(100), RESULT INT) 
INSERT INTO #TEST 
VALUES 
('XX01','Test1','Test1Sub1', 1 ), 
('XX02','Test1','Test1Sub1', 2 ), 
('XX03','Test1','Test1Sub1', 3 ), 
('XX03','Test2','Test2Sub1', 4 ), 
('XX03','Test3','Test3Sub1', 5 ), 
('XX03','Test3','Test3Sub2', 6 ), 
('XX03','Test3','Test3Sub3', 7 ), 
('XX03','Test4','Test4Sub1', 8 ), 
('XX03','Test4','Test4Sub2', 9 ), 
('XX03','Test4','Test4Sub3', 10) 


SELECT * 
FROM 
(
    SELECT SAMPLE,RESULT,SUBTEST 
      FROM #Test   
) as s 
PIVOT 
(
    MAX(RESULT) 
    FOR SUBTEST IN 
(
Test1Sub1, 
Test2Sub1, 
Test3Sub1, 
Test3Sub2, 
Test3Sub3, 
Test4Sub1, 
Test4Sub2, 
Test4Sub3 
) 
)AS pvt 

enter image description here

+2

MySQLにピボット機能がありません –

+1

@ P.Salmon彼はSQLデータベースを言ったので、私は考えました。申し訳ありません。 –

+1

@ P.Salmonというのは、彼が「MySQL」とタグ付けしているからです。彼の最初のパラグラフを読んでも***は何も言及していません***、そのすべての*** SQL ***;あなたが間違っていると言って悲しい...解決のための+1 ... – Codexer

0

左でそれを行う方法である代わりに、ピボット

select base.sample, 
     sum(t1s1.result) as Test1Sub1, 
     sum(t2s1.result) as Test2Sub1, 
     sum(t3s1.result) as Test3Sub1, 
     sum(t4s1.result) as Test4Sub1, 
     sum(t4s2.result) as Test4Sub2, 
     sum(t4s3.result) as Test4Sub3 
from (select distinct sample from tablename) as base 
left join tablename t1s1 on base.sample = t1s1.sample and t1s1.subtest='Test1Sub1' 
left join tablename t2s1 on base.sample = t2s1.sample and t2s1.subtest='Test2Sub1' 
left join tablename t3s1 on base.sample = t3s1.sample and t3s1.subtest='Test3Sub1' 
left join tablename t4s1 on base.sample = t4s1.sample and t4s1.subtest='Test4Sub1' 
left join tablename t4s2 on base.sample = t4s2.sample and t4s2.subtest='Test4Sub2' 
left join tablename t4s3 on base.sample = t4s3.sample and t4s3.subtest='Test4Sub3' 
group by sample 

の加入ます(代わりに和の最大を()を使用することができます) - 私は推測しています実際には合計が必要です。

関連する問題