2017-02-22 6 views
0

Ich verwende eine Verknüpfung, um Daten aus einigen Tabellen zu ziehen. Für 2 der Datenspalten, die von der Join-Abfrage benötigt werden, befindet sich dieselbe Spalte in der Tabelle. HierVerwenden Sie Join, um mehrere Datenzellen aus derselben Spalte zurückzugeben

ist, was ich habe jetzt:

SELECT [contract_member_brg_attr].field_id, 
     [contract_member_brg_attr].attr_val AS 'properties', 
     [contract_attr].attr_val   AS 'contract_number', 
     [contract_attr].attr_val   AS 'supplier_number' 
FROM [contract_member_brg_attr] 
     INNER JOIN [contract_member_brg] 
       ON [contract_member_brg_attr].item_id = 
        [contract_member_brg].item_id 
     INNER JOIN [contract_attr] 
       ON [contract_attr].item_id = 
        [contract_member_brg].[contract_item_id] 
        AND [contract_attr].field_id = 413 

Das folgende zurückkehrt.

enter image description here

Wie Sie die letzten 2 Zeilen zurückgegeben zu sehen ist, um die gleichen sind, weil sie aus der gleichen Spalte kommen und ich bin Filterung nur von einem von ihnen (413).

Hier ist, wo es aus() ziehen:

enter image description here

ich die Werte von 413 und 234 in der 2. Spalte benötigen.

Wenn ich versuche, hinzufügen, dass ich von 234 (OR [CONTRACT_ATTR].field_id = 234) filtern möchten auch alles Pausen:

enter image description here

Was mache ich falsch und wie kann ich es beheben?

+0

Eigentlich ist keine dieser Zeilen gleich. Sie sind alle verschieden. Was versuchst du hier zu machen? –

+0

Möchten Sie, dass Datenelemente aus 2 Zeilen als 2 separate Spalten in Ihrem Endergebnis angezeigt werden? Sie haben die Tabelle "[contract_attr]" nur einmal verwendet. 'JOIN' oder' LEFT JOIN' erneut mit einem Alias, um das 2. Attribut zu erhalten. – mheptinstall

+0

@SeanLange Im 2. Bild siehst du 12/234/A180 und 12/413/b5v5b5b5bb5? Ich möchte, dass beide als Spalten von der Join-Abfrage eingehen. –

Antwort

2

Sie können die gleiche Tabelle wiederverwenden, indem sie einen Alias ​​in diesem Beispiel geben ich genannt habe es [other_contract_attr] und die Ergebnisse an die field_id von 234.

SELECT [contract_member_brg_attr].field_id, 
     [contract_member_brg_attr].attr_val AS 'properties', 
     [contract_attr].attr_val   AS 'contract_number', 
     [other_contract_attr].attr_val   AS 'supplier_number' 
FROM [contract_member_brg_attr] 
     INNER JOIN [contract_member_brg] 
       ON [contract_member_brg_attr].item_id = 
        [contract_member_brg].item_id 
     INNER JOIN [contract_attr] 
       ON [contract_attr].item_id = 
        [contract_member_brg].[contract_item_id] 
        AND [contract_attr].field_id = 413 
    INNER JOIN [contract_attr] AS [other_contract_attr] 
       ON [other_contract_attr].item_id = 
        [contract_member_brg].[contract_item_id] 
        AND [other_contract_attr].field_id = 234 

Einschränkung jedoch sieht es aus wie Sie sind versuchen, PIVOT Zeilen in Spalten, wenn Sie Ihre Werte mehrere Zeilen in Spalten aus derselben Tabelle zurückkehren wollen, sind es besser wäre, PIVOT wie so und stattdessen das JOIN:

SELECT 
[item_id], 
MAX(CASE WHEN [field_id] = 413 
    THEN [attr_val] 
END) AS [413_val], 
MAX(CASE WHEN [field_id] = 234 
    THEN [attr_val] 
END) AS [234_val], 

FROM 
[contract_attr] 

GROUP BY 
[item_id] 
+0

Perfekt, verstehe ich jetzt. Vielen Dank! –

2

Dies ist keine Antwort auf Ihre Frage, aber es ist zu lang für einen Kommentar. Wenn Sie Aliase in Ihren Abfragen verwendet hätten, wären sie einfacher zu lesen und zu pflegen. Hier ist, was Ihre Abfrage nur durch die Verwendung von Aliasen statt dieser wirklich langen Tabellennamen immer wieder aussehen würde.

SELECT mba.field_id, 
     mba.attr_val AS 'properties', 
     ca.attr_val AS 'contract_number', 
     ca.attr_val AS 'supplier_number' 
FROM contract_member_brg_attr mba 
     INNER JOIN contract_member_brg mb 
       ON mba.item_id = 
        mb.item_id 
     INNER JOIN contract_attr ca 
       ON ca.item_id = 
        mb.contract_item_id 
        AND ca.field_id = 413 
+0

Coole Bohnen ..: D –

+1

Definitiv entwicklerfreundlicher. : P –

Verwandte Themen