2013-02-25 2 views
0

я получаю ошибку выполнения этого запроса (Мульти-часть идентификатора „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 

Пожалуйста, кто-то помогите мне :(

@bluefeet:

Я хочу, чтобы такой результат:

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

Вы не можете использовать данные из одной части присоединиться к другой части. –

+0

Итак, что мне делать? любое предложение? – Kardo

ответ

1

Если вам нужно использовать псевдоним внутри вас г подзапрос так, вы можете захотеть взглянуть на использование оператора 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 

Или вы можете использовать row_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 
+0

привет :) Спасибо за ваш ответ. Он работает, но я хочу иметь нулевые строки для UserNames. – Kardo

+0

@ Kardo см. Мое редактирование, я включил версию, используя 'row_number()' – Taryn

+0

Спасибо миллион! Это прекрасно :) Ты такой фантастический :) – Kardo

Смежные вопросы