O identificador de várias partes > “ a.surveyid ” não pôde ser vinculado [fechado ]

Fechada. Esta pergunta está fora do tópico . Atualmente não está aceitando respostas.

Resposta

SELECT a.surveyid,* FROM [360HRSurvey] inner join ( SELECT a.EmpCode,a.surveyid FROM surveyusers a where a.surveyid = 80 and a.EmpCode NOT IN (SELECT p.EmpID FROM empsurveyselection p WHERE p.surveyid =80)) a on a.EmpCode=sempid where empid = ( SELECT empid from [360HRSurveyEmployee] where surveyid = 80) 

Comentários

  • alguns erros de sintaxe Msg 102, Nível 15, Estado 1, Linha 4 Sintaxe incorreta próxima a ' a '. Msg 102, Nível 15, Estado 1, Linha 6 Sintaxe incorreta próxima a ') '
  • @smartestvega verifique agora

Resposta

Você precisa usar surveyid não a.surveyid. Porque surveyusers as a declara em sub-query então você não pode acessar a.surveyid na consulta principal.

Comentários

  • não há coluna surveyid em 360HRSurvey, portanto, isso dará um erro
  • @SmartestVEGA o que você deseja que esta coluna retorne ? O número 80?
  • sim, irei remover aquela cláusula where do id de pesquisa no futuro, então preciso retornar todos os IDs de pesquisa anexados à função principal
  • para isso você precisa use join.

Resposta

O motivo do erro foi explicado em Resposta de Jaimin Soni .

Já que você deseja incluir surveyid no resultado e este não é um atributo do [360HRSurvey] tabela, você poderia apenas usar SELECT 80 AS surveyid, * ... para esta consulta específica. Se surveyid não for corrigido – em uma consulta mais complexa – você pode juntar à tabela que tem este atributo. Supondo que esta tabela seja surveyusers e que haja um FOREIGN KEY de [360HRSurvey] (sempid) que REFERENCES surveyusers(EmpCode), a consulta pode ser reescrita:

SELECT a.surveyid, hrs.* FROM [360HRSurvey] AS hrs JOIN surveyusers AS a ON a.EmpCode = hrs.sempid WHERE a.surveyid = 80 -- this condition can be altered or removed AND a.EmpCode NOT IN ( SELECT p.EmpID FROM empsurveyselection p WHERE p.surveyid = a.surveyid ) AND a.empid = ( -- unclear if it"s a.empid or hrs.empid SELECT hrsemp.empid FROM [360HRSurveyEmployee] AS hrsemp WHERE hrsemp.surveyid = a.surveyid ) ; 

Resposta

SELECT su.surveyid,b.* FROM surveyusers SU RIGHT JOIN (SELECT * FROM [360HRSurvey] where sempid NOT IN ( SELECT a.EmpCode FROM surveyusers a where a.EmpCode IN (SELECT p.EmpID FROM empsurveyselection p where deptid = 9 ) and empid IN ( SELECT empid from [360HRSurveyEmployee] ))) B ON su.EmpCode = b.sempid Order by surveyid desc 

Corrigido sozinho

Comentários

  • O where deptid = 9 não fazia parte da consulta original.
  • sim, adicionado internacionalmente para uma mudança de lógica de negócios, obrigado

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *