2017-05-25 5 views
0
------- id ------- id ------- id ------- id ------- 
| t-1 | <---> | t-a | <---> | t-b | <---> | s-a | <---> | s-b | 
-------  -------  -------  -------  ------- 

SELECT distinct 
    t-a.col, t-b.col 
FROM 
    INNER JOIN t-1 ON t-1.id = t-a.id 
    LEFT OUTER JOIN t-b on t-a.id = t-b.id 
GROUP BY 
    T-1.id 

donc ce que je veux est d'afficher une colonne de s-b (ainsi que toutes les autres colonnes étant affichées) qui est référencée par s-un qui est référencé par t-b. Je peux afficher tout ce que je veux de t-a et t-b mais j'obtiens des erreurs en essayant de relier les autres sous-tables.colonnes de référence d'affichage dans plusieurs enfants SQL

SELECT distinct 
     inspections.inspection_id as InspectionId, 
     convert(char(3),inspections.Inspection_Type) + ' ' + Inspection_Desc as Inspection, 
     inspections.current_status as Current_Status, 
     case when left(inspections.current_status,1) = 'X' then 'SCHEDULED' else inspection_status.status_description end as Current_Status_Name, 
     convert(varchar(10),max(distinct inspection_history.scheduled_date),101) as 'Last_Scheduled', 
     convert(varchar(10),max(distinct inspection_history.inspect_date),101) as 'Last_Inspected', 
     inspections.inspection_type, 
     case when (inspections.current_status <> 'A' and left(inspections.current_status,1) <> 'X' and left(inspections.current_status,1) <> 'S') then dbo.fn_DependencyCheckMessage(@PermitNum,inspections.inspection_type) else '' end as Dependency_Message, 
     case when (inspections.current_status <> 'A' and left(inspections.current_status,1) <> 'X' and left(inspections.current_status,1) <> 'S') and (dbo.fn_DependencyCheck(@PermitNum,inspections.inspection_type)=1 and dbo.fn_CheckTempDeposits(@PermitNum,inspections.inspection_type)=1 and dbo.fn_CertOccCheck(@PermitNum,inspections.inspection_type)=1) then 1 else 0 end as AllowSchedule, 
     inspection_comments.comment_description as comment 

    FROM inspections 

     inner join permit_arch on permit_arch.permit_id = Inspections.permit_id 
     inner join inspection_types on inspection_types.inspection_type = Inspections.inspection_type 
     LEFT OUTER JOIN inspection_history ON inspections.inspection_id = inspection_history.inspection_id 
     LEFT OUTER JOIN inspection_status ON inspections.current_status = inspection_status.status_code 

     LEFT JOIN inspection_history_comment ON inspection_history.insp_hist_id = inspection_history_comment.inspection_history_id 
     LEFT JOIN inspection_comments ON inspection_history_comment.comment_code = inspection_comments.comment_code 

    WHERE 

     permit_arch.permit_number = @PermitNum 
     AND 
     (inspection_types.internal_only is null or inspection_types.internal_only = 0) 
     AND 
     (inspection_history.status <> 'D' or inspection_history.status is null) 

    GROUP BY permit_arch.permit_number,permit_arch.permit_status, inspections.Inspection_Type, inspection_types.inspection_desc, inspections.current_status,inspection_status.status_description, 
       inspections.inspection_id 

    HAVING Permit_arch.permit_number = @Permitnum and (inspections.current_status <> 'D' or inspections.current_status is null) and inspections.inspection_type <> 34 

    ORDER BY inspections.inspection_type ASC 

Mes jointures sont les deux dernières. erreurs SSMS avec:

Msg 8120, Niveau 16, État 1, Procédure procWebGetPermitInspectionsForSchedulingA, Ligne 20 [Lot ligne de départ 7]
Colonne 'inspection_comments.comment_description' est invalide dans la liste de sélection, car il ne figure pas dans soit une fonction d'agrégat ou la clause GROUP BY.

Msg 145, Niveau 15, État 1, Procédure procWebGetPermitInspectionsForSchedulingA, Ligne 10 [Lot ligne de départ 7]
éléments ORDER BY doit apparaître dans la liste de sélection est spécifiée si SELECT DISTINCT.

Je veux obtenir la colonne inspection_comments.description

+0

pouvez-vous s'il vous plaît poster l'erreur – maSTAShuFu

+0

voir encadré jaune au-dessus – cheborneck

+0

Ajouter cette colonne dans le groupe par et enlever commande par et revérifier votre résultat – maSTAShuFu

Répondre

0

Vous n'avez pas besoin group by dans votre requête. Il est utilisé lorsqu'il existe une fonction agrégée comme sum, max etc. dans l'instruction select. Vous avez également manqué de mentionner t-a avant inner join dans votre requête. J'ai inclus cela dans ma requête.

En outre, Left outer join est rien mais Left join lui-même. Par conséquent, j'ai changé cela aussi dans la requête

Essayez ceci: -

SELECT distinct 
    t-a.col, t-b.col, s-b.col 
FROM t-a 
    INNER JOIN t-1 ON t-1.id = t-a.id 
    LEFT JOIN t-b on t-a.id = t-b.id 
    LEFT JOIN s-a on t-b.id=s-a.id 
    LEFT JOIN s-b on s-a.id=s-b.id; 
+0

voir mes modifications avec le code réel. Les deux dernières jointures sont celles qui me mèneraient à la colonne dont j'ai besoin. – cheborneck