Tsql 多部分标识符“…”&引用;无法约束

Tsql 多部分标识符“…”&引用;无法约束,tsql,subquery,identifier,Tsql,Subquery,Identifier,我收到错误(无法绑定多部分标识符“f.FormID”)。正在运行此查询: select f.FormID, f.Title, fv.UserName from Forms f join ( SELECT FormID FROM Reports WHERE (ReportID = @ReportID) UNION SELECT F

我收到错误(无法绑定多部分标识符“f.FormID”)。正在运行此查询:

select f.FormID, f.Title, fv.UserName
    from Forms f join (
        SELECT        FormID
            FROM            Reports
            WHERE        (ReportID = @ReportID)
        UNION 
        SELECT        FormRelations.ForigenFormID
        FROM            FormRelations INNER JOIN
                                    Forms ON FormRelations.ForigenFormID = Forms.FormID
        WHERE        (FormRelations.PrimaryFormID =
                            (SELECT        FormID
                            FROM            Reports
                            WHERE        (ReportID = @ReportID)))
        ) ids
        on f.FormID = ids.FormID

    LEFT OUTER JOIN (select top 1 UserName, FormID from FormValues where FormID = f.FormID and UserName = @UserName) fv
        ON f.FormID = fv.FormID 
请有人帮帮我:(

@蓝脚:

我想要这样的结果:

01304636-FABE-4A3E-9487-A14B012F9A61    item_1  1234567890
C0455E97-788A-4305-876A-A15000CFE928    item_2  1234567890
7719F37E-7021-4ABD-91ED-A15301830324    item_3  1234567890

如果您需要在子查询中使用别名,您可能需要查看如何使用
APPLY
操作符:

select f.FormID, f.Title, fv.UserName
from Forms f 
join 
(
    SELECT        FormID
    FROM            Reports
    WHERE        (ReportID = @ReportID)
    UNION 
    SELECT        FormRelations.ForigenFormID
    FROM            FormRelations 
    INNER JOIN Forms 
        ON FormRelations.ForigenFormID = Forms.FormID
    WHERE        (FormRelations.PrimaryFormID = (SELECT        FormID
                                                 FROM            Reports
                                                 WHERE        (ReportID = @ReportID)))
) ids
    on f.FormID = ids.FormID
CROSS APPLY
(
    select top 1 UserName, FormID 
    from FormValues 
    where FormID = f.FormID 
        and UserName = @UserName
) fv
或者您可以使用
行编号()


您不能在另一个部分中使用来自一个部分的数据。那么我应该怎么做?有什么建议吗?您好:)谢谢您的回答。它可以工作,但我也希望用户名的行为空。@Kardo查看我的编辑,我使用
row\u number()
包含了一个版本,非常感谢!太完美了:)你太棒了:)你也可以看看这个帖子吗?
select f.FormID, f.Title, fv.UserName
from Forms f 
join 
(
    SELECT        FormID
    FROM            Reports
    WHERE        (ReportID = @ReportID)
    UNION 
    SELECT        FormRelations.ForigenFormID
    FROM            FormRelations 
    INNER JOIN Forms 
        ON FormRelations.ForigenFormID = Forms.FormID
    WHERE        (FormRelations.PrimaryFormID = (SELECT        FormID
                                                 FROM            Reports
                                                 WHERE        (ReportID = @ReportID)))
) ids
    on f.FormID = ids.FormID
LEFT JOIN
(
    select UserName, FormID,
        ROW_NUMBER() over(PARTITION by FormID, UserName order by FormID) rn  
    from FormValues 
    where UserName = @UserName
) fv
    on f.FormID = fv.FormID
    and fv.rn = 1