sql >> Database teknologi >  >> RDS >> Sqlserver

Fang flere typer data i SQL Server

Så - det ser ud til, at du har en mærkeligt organiseret opgavetabel, og som et resultat bliver du nødt til at gøre lidt underlige ting for at forespørge rigtigt. Ifølge din beskrivelse indeholder en række i opgavetabellen enten et studentId, et admissionId, et enquiryId eller et enquiryDetailId. Dette er ikke en optimal måde at gøre dette på...men jeg forstår, at nogle gange skal man klare sig med det, man har.

Så for at få navnene, skal du slutte dig til kilden til navnene...og forudsat at de er overalt, i relaterede tabeller, kan du gøre noget som:

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

...eller du kan opnå det samme lidt indefra:

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. MySQL sammenligne now() (kun dato, ikke tid) med et datetime-felt

  2. Filtrer rækker med flere store vektorer

  3. Spring Boot Actuator/health endpoint viser ikke database- eller filsystemoplysninger

  4. MySQL tæller alle børn, uanset hvor mange der er