2017-09-01 3 views
0

にSQLクエリの列に行を変換します私が依頼する問題を抱えている列の時間

Time  Pass Fail 
------------------------- 
08:30 10  2 
09:30 12  1 
10:30 20  0 
11:30 30  40 

私は列に行を変換し、

以下
08:30 09:30 10:30 11:30 
------------------------------ 
10  12  20  30 
    2   1  0  40 

に、このような情報を表示しようとしています助けてください私!

ありがとうございました!これはトリックを行う必要があります

+0

ようこそ。時間をかけて[良い質問をする方法](https://stackoverflow.com/help/how-to-ask)セクションをご覧ください。さらに、[最小、完全、および検証可能なサンプルの作成方法](https://stackoverflow.com/help/mcve)をお読みください。スタックオーバーフローは、武道のサイトでもあなたのために仕事をしているサイトでもないので、あなた自身で何かを試してみてください。 –

答えて

0

...

IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL 
DROP TABLE #TestData; 

CREATE TABLE #TestData (
    [Time] DATETIME NOT NULL, 
    Pass INT NOT NULL, 
    Fail INT NOT null 
    ); 
INSERT #TestData (Time, Pass, Fail) VALUES 
    ('08:30',10, 2), 
    ('09:30',12, 1), 
    ('10:30',20, 0), 
    ('11:30',30, 40); 

SELECT 
    [P/F] = CASE WHEN pf.id = 1 THEN 'Pass' ELSE 'Fail' END, 
    [08:30] = MAX(CASE WHEN td.[Time] = '08:30' THEN pf.Value END), 
    [09:30] = MAX(CASE WHEN td.[Time] = '09:30' THEN pf.Value END), 
    [10:30] = MAX(CASE WHEN td.[Time] = '10:30' THEN pf.Value END), 
    [11:30] = MAX(CASE WHEN td.[Time] = '11:30' THEN pf.Value END) 
FROM 
    #TestData td 
    CROSS APPLY (VALUES (1, td.Pass), (2, td.Fail)) pf (id, Value) 
GROUP BY 
    pf.id; 

結果...にStackOverflowに

P/F 08:30  09:30  10:30  11:30 
---- ----------- ----------- ----------- ----------- 
Pass 10   12   20   30 
Fail 2   1   0   40 
+0

ありがとう、ありがとうございますが、エラーが発生しました: 'APPLY'付近の構文が正しくありません。 –

+0

あなたはどのデータベースを使用していますか? –

+0

TIME(0)が正しく挿入されていません! データ型[datetime]を使用しています:1900-01-01 08:30:00.000。上記の同じテーブルを使用してください! –

関連する問題