2016-06-23 11 views
-3

ich eine SQL-Tabelle haben, die Werte wie das Bild unten spartWie transponieren Spalte ohne SQL-Prozeduren

Original table

Jetzt brauche ich wie unten gezeigt, um diese Tabelle zu transponieren.

Transposed table

Ich muss dies tun, ohne gespeicherte Prozedur. Ich versuche, die 2. Tabelle an 4 Datagridview Checkbox-Spalte zu binden.

+2

können Sie anfangen zu studieren über 'PIVOT'; Probieren Sie einen Code aus und kommen Sie hier zurück – techspider

+0

"Ich muss dies tun, ohne SQL zu verwenden" - wie genau erwarten Sie, es zu tun? –

+0

Entschuldigung. Ich wollte dies tun, ohne einen neuen gespeicherten Proc oder irgendwelche temporären Tabellen, Cursor usw. Bearbeitete meine Frage jetzt. Ich lerne nun Pivot in SQL. Aber dieser scheint selbst mit Pivot-Tabellen schwierig zu sein. – Saranya

Antwort

1

Dies sollte jedoch arbeiten Sie versuchen müssen, können und es dynamisch zu machen, wenn Sie Ihre Werte in C2 sind nicht immer [MP], [KL], [OL], [IFL] Seien Sie auch vorsichtig sein würde CROSS JOIN verwenden, wenn Ihre Datensätze relativ groß sind:

SAMPLE DATA:

IF OBJECT_ID('tempdb..#temp') IS NOT NULL 
    DROP TABLE #temp; 

CREATE TABLE #temp(C1 INT 
       , C2 VARCHAR(10)); 

INSERT INTO #temp 
VALUES 
     (1 
    , 'MP'), 
     (2 
    , 'KL'), 
     (3 
    , 'OL'), 
     (3 
    , 'IFL'); 

QUERY:

SELECT DISTINCT 
     C1 
    , [MP] = CASE 
       WHEN [MP] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
    , [KL] = CASE 
       WHEN [KL] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
    , [OL] = CASE 
       WHEN [OL] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
    , [IFL] = CASE 
       WHEN [IFL] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
FROM #temp AS A 
     CROSS JOIN 
       (SELECT [MP] 
        , [KL] 
        , [OL] 
        , [IFL] 
       FROM 
        (SELECT C1 
         , C2 
        FROM #temp) AS SourceTable PIVOT(MAX(C1) FOR C2 IN([MP] 
                   , [KL] 
                   , [OL] 
                   , [IFL])) AS PivotTable) AS B; 

ERGEBNIS:

enter image description here