SSDT中关联Header与Line表填充事实表时SQL语法错误求助
问题解决与替代表关联方式
一、语法错误修复
你的SQL报错核心原因是**Statut列定义结束后未添加逗号**,导致数据库无法正确解析后续列。此外还有两处细节问题:部分列未指定表别名(可能引发歧义)、[Line No_] as[Line Num_]缺少空格。
修复后的完整SQL如下:
select concat ([Document No_],[Line No_]) as [InterventionLigne], case H.Status when 0 then '' when 1 then 'Non Traité' when 2 then 'Intervention' when 3 then 'Rép. en Instance' when 4 then 'Rép. en cours' when 5 then 'Liv. en Instance' when 6 then 'Liv. en cours' when 7 then 'Email envoyé' when 8 then 'Pickup Magasin' when 9 then 'Arrivé a IRC' when 10 then 'Transfert au CTA' when 11 then 'Retour du CTA' when 12 then 'Retour au magasin' when 13 then 'Livraison' end as Statut, -- 此处添加逗号 H.[No_ Document Externe] as [Num_ Document Externe], -- 指定表别名H H.[Nom], H.[Adresse Contact], H.[Ville], H.[Commentaire], -- 指定表别名 H.[Sources Réclamations], -- 指定表别名 H.[Date Reclamation], -- 指定表别名 H.[Designation], -- 指定表别名 case H.Saved when 0 then 'Non' when 1 then 'Oui' end as Enregist, case H.Validated when 0 then 'Non' when 1 then 'Oui' end as Validé, H.[USER] as [Utilisateur], -- 指定表别名 case H.[Type Intervention] when 0 then '' when 1 then 'Direct' when 2 then 'Via Un Partenaire' end as [Type_Intervention], H.[Partenaire],H.[Année garantie], -- 指定表别名 case H.NonEdit when 0 then 'Non' when 1 then 'Oui' end as [NonEdit], H.[Magasin],H.[Emplacement],H.[En Garantie],H.[Job No_], -- 指定表别名 H.[Document No_] as [Document Num_], L.[Line No_] as [Line Num_], -- 修正空格并指定表别名L L.[Type Travaux],L.[Starting Date] as [DateDébut], -- 指定表别名L L.[Travaux effectués], L.[Libellé], L.[technicien], L.[Remarque], L.[Rémunération] from [dbo].[Header$] H left join [dbo].[Line$] L on H.[No_ Document] = L.[Document No_]
二、其他表关联方式
除了当前使用的左连接(LEFT JOIN),还有以下几种常用关联方式:
- 内连接(INNER JOIN):仅返回两张表中匹配关联条件的行,适合只需要存在对应关系的数据场景。示例:
from [dbo].[Header$] H inner join [dbo].[Line$] L on H.[No_ Document] = L.[Document No_] - 右连接(RIGHT JOIN):返回Line表的所有行,以及Header表中匹配的行,适合需要保留Line表全部数据的场景。示例:
from [dbo].[Header$] H right join [dbo].[Line$] L on H.[No_ Document] = L.[Document No_] - 多键关联:如果存在多个关联维度(比如
Document No_+Line No_),可以扩展关联条件确保行匹配更精准。示例:from [dbo].[Header$] H left join [dbo].[Line$] L on H.[No_ Document] = L.[Document No_] and H.[Line No_] = L.[Line No_] - SSDT可视化关联:在SSDT的数据集设计界面,直接拖拽Header表与Line表的关联字段(如
No_ Document和Document No_),系统自动生成关联逻辑,无需手动编写SQL。
内容的提问来源于stack exchange,提问作者Ibtissam Fethani
相关产品推荐
相关产品推荐

