Impossibile associare lidentificatore multiparte > “ a.surveyid ” [chiuso ]

Chiuso. Questa domanda è fuori tema . Attualmente non accetta risposte.

Risposta

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) 

Commenti

  • alcuni errori di sintassi Msg 102, Livello 15, Stato 1, Riga 4 Sintassi non corretta vicino a ' a '. Msg 102, Livello 15, Stato 1, Riga 6 Sintassi non corretta vicino a ') '
  • @smartestvega controlla ora

Risposta

Devi utilizzare surveyid non a.surveyid. Perché surveyusers as a dichiara in sub-query quindi non puoi accedere a a.surveyid nella query principale.

Commenti

  • non cè nessuna colonna surveyid in 360HRSurvey quindi questo darà errore
  • @SmartestVEGA cosa vuoi che questa colonna restituisca ? Il numero 80?
  • sì, rimuoverò quella clausola where dellID sondaggio in futuro, quindi devo restituire tutto lID sondaggio aggiunto alla funzione principale
  • per quello che è necessario usa join.

Risposta

Il motivo dellerrore è stato spiegato in Risposta di Jaimin Soni .

Dal momento che vuoi includere surveyid nel risultato e questo non è un attributo del [360HRSurvey] tabella, potresti semplicemente utilizzare SELECT 80 AS surveyid, * ... per questa particolare query. Se surveyid non lo è risolto però – in una query più complessa – puoi unirti alla tabella che ha questo attributo. Supponendo che questa tabella sia surveyusers e che ci sia un FOREIGN KEY da [360HRSurvey] (sempid) che REFERENCES surveyusers(EmpCode), la query può essere riscritta:

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 ) ; 

Risposta

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 

Risolto da solo

Commenti

  • Il where deptid = 9 non faceva parte della query originale.
  • sì, aggiunto intenzionalmente per un cambiamento della logica aziendale, grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *