2017-02-03 6 views
0

Ich habe eine Tabelle wie folgt, ich muss die Tabelle mit Wochen drehen. Ich könnte Pivot-Tabelle erstellen, aber die Reihenfolge der Spalten wird gemischt, da ich eine String-Spalte anordne. und Ausgabe wie 3. Tabelle erhalten.Ordnung durch eine Schnur als Zahl sql

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

Ich brauche Wie von Weeks Ausgabe als Pivot-Tabelle, um zu bekommen,

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 

Wenn ich versuche, diese Tabelle zu erstellen, bestellen Sie die Spalten wie unten neu gemischt zu werden,

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 

Mein Code ist,

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); 

Bitte helfen Sie mir, mein Problem zu lösen,

Antwort

1

Es ist eine Zeichenfolge (alpha) Art tun, und Sie wollen tatsächlich eine numerische Art zu tun.

würde ich die Auftragszeile aus ändern:

Auftrag von WeeksBand

zu:

Reihenfolge von Besetzung (SubString (WeeksBand, 1, CASE WHEN CHARINDEX ('-', WeeksBand) ! = 0 CHARINDEX ('-', WeeksBand) -1 ELSE LEN (WochenBand) END) AS INT)

die erste Zahl in einen Integer-Wert (keine Zeichenkette) umwandeln und dann richtig ordnen.

+0

Großartig! das funktioniert. Danke für die Unterstützung –

0

Ich sehe nicht, warum eine Standard-Pivot-Abfrage hier nicht funktionieren sollte. Von Ihrer erwarteten Ausgabe scheint es, dass Sie einen 1 als Platzhalter für einen MRN Eintrag wünschen, der in dieser Woche vorhanden ist, und 0 andernfalls.

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

Sie sollten formatieren Woche Feld ersten Tabelle mit 2 Ziffern als:

MRN     Weeks 
-------------------------------- 
GIRFTR1H0461081  52 
GIRFTR1H0461083  05 - 06 
GIRFTR1H0461084  00 - 01 
GIRFTR1H0461085  01 - 02 
GIRFTR1H0461086  11 - 12 
GIRFTR1H0461087  01 - 02 
Verwandte Themen