2017-02-03 3 views
0

私は次のようなテーブルを持っている、私は数週間でテーブルをピボットする必要があります。私はピボットテーブルを作成することができたが、列の順序は文字列を順序付けしてからシャッフルされる。 3番目のテーブルのように出力されます。数字の文字列で注文する

私は、このテーブルを作成しようとすると、列は、怒鳴るよう

MRN    | 0 - 1 | 1 - 2 |11 - 12| 5 - 6 | 52 
--------------------------------------------------------------- 
GIRFTR1H0461081 | 0 | 0 | 0 | 0 | 0 
GIRFTR1H0461083 | 0 | 0 | 0 | 1 | 0 
GIRFTR1H0461084 | 1 | 0 | 0 | 0 | 0 
GIRFTR1H0461085 | 0 | 1 | 0 | 0 | 0 
GIRFTR1H0461086 | 0 | 0 | 1 | 0 | 0 
GIRFTR1H0461087 | 0 | 1 | 0 | 0 | 0 
をシャッフルなっ発注

MRN    | 0 - 1 | 1 - 2 | 5 - 6 |11 - 12| 52 
--------------------------------------------------------------- 
GIRFTR1H0461081 | 0 | 0 | 0 | 0 | 0 
GIRFTR1H0461083 | 0 | 0 | 1 | 0 | 0 
GIRFTR1H0461084 | 1 | 0 | 0 | 0 | 0 
GIRFTR1H0461085 | 0 | 1 | 0 | 0 | 0 
GIRFTR1H0461086 | 0 | 0 | 0 | 1 | 0 
GIRFTR1H0461087  0 | 1 | 0 | 0 | 0 

、同様週間でピボットテーブルの順序として出力を取得する必要があります

MRN     Weeks 
-------------------------------- 
GIRFTR1H0461081  52 
GIRFTR1H0461083  5 - 6 
GIRFTR1H0461084  0 - 1 
GIRFTR1H0461085  1 - 2 
GIRFTR1H0461086  11 - 12 
GIRFTR1H0461087  1 - 2 

マイコードは、

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

    select @cols = STUFF((SELECT ',' + QUOTENAME(WeeksBand) 
          from [test_Tbl] 
          group by WeeksBand 
          order by WeeksBand 
          FOR XML PATH(''), TYPE 
         ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'') 

    set @query = 'SELECT CurrentSpecialty,' + @cols + ' from 
       (
        select CurrentSpecialty, WeeksBand, EncounterId 
        from [Tbl_Current_PTL_Test] 
       ) x 
       pivot 
       (
        count(EncounterId) 
        for WeeksBand in (' + @cols + ') 
       ) p ' 

    execute(@query); 

問題を整理するのを手伝ってください。

答えて

1

。 WeeksBandによって

順:

私はからのオーダーラインを変更したいキャスト(SUBSTRING(WeeksBand、1で

順序を、CASE WHEN CHARINDEX( ' - '、WeeksBand) != 0 THEN CHARINDEX( ' - '、WeeksBand)-1 ELSE LEN(WeeksBand)END)INT AS)

整数値(文字列ではありません)に最初の番号を変換し、その後、正しくご注文べきです。

+0

素晴らしい!これは機能します。ご支援ありがとうございます –

0

標準のピボットクエリがここでは機能しない理由がわかりません。期待された出力から、その週に存在するMRNエントリのプレースホルダーとして1が必要で、それ以外の場合は0となります。

SELECT [MRN], 
     MAX(CASE WHEN [Weeks] = '0 - 1' THEN 1 ELSE 0 END) AS [0 - 1], 
     MAX(CASE WHEN [Weeks] = '1 - 2' THEN 1 ELSE 0 END) AS [1 - 2], 
     MAX(CASE WHEN [Weeks] = '5 - 6' THEN 1 ELSE 0 END) AS [5 - 6], 
     MAX(CASE WHEN [Weeks] = '11 - 12' THEN 1 ELSE 0 END) AS [11 - 12], 
     MAX(CASE WHEN [Weeks] = '52'  THEN 1 ELSE 0 END) AS [52] 
FROM [yourTable] 
GROUP BY [MRN] 
0

のようにして、2桁の数字を使用して第1表の週のフィールドをフォーマットする必要があります:それは(アルファ)の並べ替えをする文字列をやっている、とあなたが実際に数値の並べ替えを行うことにしたい

MRN     Weeks 
-------------------------------- 
GIRFTR1H0461081  52 
GIRFTR1H0461083  05 - 06 
GIRFTR1H0461084  00 - 01 
GIRFTR1H0461085  01 - 02 
GIRFTR1H0461086  11 - 12 
GIRFTR1H0461087  01 - 02 
関連する問題