2017-07-04 3 views
0

Ich habe 2 Tabellen:Wählen Sie einen Spaltenkopf gleichen Namen und Anzeigedaten horizontal

1-Verträge SQL Ausgabe wie dieses Ergebnis

contracts_id | subject_contract 
    001   | name    
    002   | name       

2-contracts_files

contracts_id | file_data 
    001   | 1image <varbinary(MAX)> 
    002   | 1image <varbinary(MAX)> 
    001   | 2image <varbinary(MAX)> 
    002   | 2image <varbinary(MAX)> 

brauchen:

contracts_id | subject_contract | file_data | file_data 
001   | name    | 1image  | 2image 
002   | name    | 1image  | 2image 

Ich versuche, diese

SELECT Contracts.[contracts_id] 
     ,Contracts.[subject_contract] 
     ,contracts_files.[filedata] 


    FROM Contracts , contracts_files 

    where contracts_files.contracts_id = Contracts.contracts_id 

    AND Contracts.contracts_id=' 001 ' 

aber das Ergebnis war:

contracts_id | subject_contract | file_data 
    001  | name    | 1image 
    001  | name    | 2image  

Wie mache ich es mit 'FOR LOOP' oder mit 'CASE'?

+0

Also, Sie eine Lösung mit CASE fragen sind, und akzeptieren dann eine Antwort, die nicht verwenden, nicht es? –

Antwort

1

können Sie schwenken verwenden, wie unten:

Select * from (
    SELECT c.[contracts_id] 
      ,c.[subject_contract] 
      ,cf.[filedata] 
      ,RN = Row_Number() over (partition by c.[Contracts_id] order by c.[contracts_id]) 
     FROM Contracts c join contracts_files cf 
     ON cf.contracts_id = c.contracts_id 
    ) a 
     pivot (max(filedata) for RN in ([1],[2])) p 
+0

danke für die Antwort: aber etwas falsch in 'Pivot (max (filedata) für RN in ([1], [2])) p' – D2rkZ3r0

+0

Ich denke, es erwartet Alias ​​... ich aktualisiert, können Sie jetzt überprüfen, was ist Error? –

0

Wenn Sie schwenken nicht mögen, tun die alte Art und Weise der Fall (wenn einige Variable = 1), dann (etwas Wert). Wenn das WHEN nicht funktioniert, wird NULL verwendet, MAX() gibt kein NULL zurück. Markieren Sie die innere Abfrage und führt genau das zu sehen, wie die Daten auf halben Weg durch die Transformation sehen, wenn Sie neugierig

SELECT 
    contracts_id, 
    subject_contract, 
    MAX(CASE WHEN rown = 1 then file_data end) as file1, 
    MAX(CASE WHEN rown = 2 then file_data end) as file2 

FROM 
    (SELECT c.contracts_id, subject_contract, file_data, row_number() over (partition by c.[Contracts_id] order by c.[contracts_id]) as rown FROM contracts c INNER JOIN contracts_files cf ON cf.contracts_id = c.contracts_id) a 
GROUP BY 
    contracts_id, 
    subject_contract 
Verwandte Themen