在多子SQL中显示引用列

在多子SQL中显示引用列,sql,join,group-by,ssms,distinct,Sql,Join,Group By,Ssms,Distinct,所以我想显示的是s-b中的一列,以及s-a引用的所有其他列,t-b引用的列。我可以显示t-a和t-b中我想要的任何内容,但是我在尝试链接其他子表时出错 ------- id ------- id ------- id ------- id ------- | t-1 | <---> | t-a | <---> | t-b | <---> | s-a | <---> | s-b | ------- -------

所以我想显示的是s-b中的一列,以及s-a引用的所有其他列,t-b引用的列。我可以显示t-a和t-b中我想要的任何内容,但是我在尝试链接其他子表时出错

-------  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
我的连接是最后两个。SSMS错误包括:

Msg 8120,16级,状态1,程序ProcWebGetPermitInInspections for Schedulinga,第20行[批次开始第7行] 列“inspection\u comments.comment\u description”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

Msg 145,第15级,状态1,程序ProcWebGetPermitInInspectionsForSchedulinga,第10行[批次开始第7行] 如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中

我想获取列检查注释。说明在查询中不需要group by。当select语句中有sum、max等聚合函数时使用。在查询中,您还没有在内部联接之前提到t-a。我已经在我的询问中包括了这一点

而且,左外连接只是左连接本身。因此,我在查询中也对其进行了更改

试试这个:-

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

你能发布错误吗?请参见上面的黄色框在group by和remove order by中添加该列,并重新检查你的结果以修复它。感谢@mastashufa如果您+1看到我用实际代码所做的编辑,将不胜感激。最后两个连接将把我带到我需要的专栏。
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;