SQL left join pour renvoyer des inputs NULL pour plusieurs critères

J'ai deux tables. Un appelé tbl_id et un appelé tbl_values.

tbl_id est comme ci-dessous:

property_id | Name 1 | Height 2 | Depth 3 | Length 4 | Weight 

tbl_values ​​est comme ci-dessous:

 property_id | submission_ID | Value 2 | 100 | 123.5 3 | 100 | 22.4 1 | 200 | 548.0 3 | 200 | 34.2 4 | 200 | 17.9 

La sortie que je veux est celle-ci:

 submission_ID | Name | Value 100 | Height | NULL 100 | Depth | 123.5 100 | Length | 22.4 100 | Weight | NULL 200 | Height | 548.0 200 | Depth | NULL 200 | Length | 34.2 200 | Weight | 17.9 

Le SQL que j'ai jusqu'ici est ceci:

 SELECT t2.submission_ID, t1.Name, t2.Value FROM tbl_id t1 LEFT JOIN tbl_values t2 ON t2.property_id = t1.property_id AND submission_ID IN (100,200) ORDER BY t2.submission_ID 

Ce code SQL, exécuté dans le server SQL 2014, renvoie les valeurs que je souhaite, mais pas les valeurs NULL séparément pour chaque ID de repository. Y a-t-il un moyen de faire cela? Merci d'avance.

Essayez cette requête:

 SELECT t2.submission_ID, t1.Name, t3.Value FROM tbl_id t1 CROSS JOIN ( SELECT DISTINCT submission_ID FROM tbl_values ) t2 LEFT JOIN tbl_values t3 ON t1.property_id = t3.property_id AND t2.submission_id = t3.submission_id ORDER BY t2.submission_ID, t1.property_id 

J'ai testé cette requête localement dans Postgres (je n'ai pas SQL Server) et il semble fonctionner. L'astuce ici est la première jointure, qui génère toutes les combinaisons entre les ID de soumission et les noms. Ensuite, nous faisons une seconde jointure pour introduire les valeurs réelles qui correspondent.