Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przechwytuj wiele typów danych w SQL Server

Wygląda na to, że masz dziwnie zorganizowaną tabelę zadań, w wyniku czego będziesz musiał zrobić nieco dziwne rzeczy, aby poprawnie wykonać zapytanie. Zgodnie z opisem wiersz w tabeli zadań zawiera identyfikator studentId, admitId, enquiryId lub enquiryDetailId. Nie jest to optymalny sposób na zrobienie tego ... ale rozumiem, że czasami musisz sobie radzić z tym, co masz.

Tak więc, aby uzyskać nazwy, musisz dołączyć do źródła nazw... i zakładając, że są wszędzie, w powiązanych tabelach, możesz zrobić coś takiego:

select 
  t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join Student s on t.StudentId = s.Id
union all
select 
  t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join Admission a on t.AdmissionId = a.Id
union all 
select 
  t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join Enquiry e on t.EnquiryId = e.Id
union all 
select 
  t.StudentID,t.AdmissionID,t.EnquiryID,t.EnquiryDetailsID,x.FirstName,x.LastName
from Task t inner join EnquiryDetail d on t.EnquiryDetailId = d.Id

...albo możesz osiągnąć to samo od środka:

select 
  t.StudentID, 
  t.AdmissionID, 
  t.EnquiryID, 
  t.EnquiryDetailsID,
  x.FirstName,
  x.LastName
from 
  Task t
  inner join
  (
    select 's' source, Id, FirstName, LastName from Student union all
    select 'a' source, Id, FirstName, LastName from Admission union all
    select 'e' source, Id, FirstName, LastName from Enquiry union all
    select 'd' source, Id, FirstName, LastName from EnquiryDetail
  ) as x
  on
    ( t.StudentId  = x.Id and x.source = 's' )
    or
    ( t.AdmissionId = x.Id and x.source = 'a' )
    or
    ( t.EnquiryId = x.Id and x.source = 'e' )
    or 
    ( t.EnquiryDetailId = x.Id and x.source = 'd' )
where 
  t.TaskUser=0 and t.BranchID=1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić datę ostatniej zmiany w procedurze składowanej lub funkcji na serwerze SQL?

  2. Jak zastosować posiadanie klauzuli z grupą przez w Select Query — samouczek SQL Server / TSQL, część 131

  3. Haszowanie hasła do SQL

  4. SqlCommand.ExecuteScalar Anuluj

  5. Wyzwalacz SQL Server 2008