Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tangkap beberapa jenis data di SQL Server

Jadi - sepertinya Anda memiliki tabel tugas yang terorganisir secara aneh, dan sebagai hasilnya, Anda harus melakukan hal-hal yang agak aneh untuk melakukan kueri dengan benar. Menurut deskripsi Anda, baris dalam tabel tugas berisi studentId, acceptanceId, enquiryId, atau enquiryDetailId. Ini bukan cara yang optimal untuk melakukan ini...tapi saya mengerti bahwa terkadang Anda harus bertahan dengan apa yang Anda miliki.

Jadi, untuk mendapatkan nama, Anda harus bergabung dengan sumber nama... dan dengan asumsi mereka ada di semua tempat, di tabel terkait, Anda bisa melakukan sesuatu seperti:

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

...atau, Anda dapat melakukan hal yang sama dari dalam ke luar:

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. Partisi tabel menggunakan 2 kolom

  2. Temukan baris yang diubah (kunci komposit dengan nol)

  3. Bagaimana cara menghasilkan nomor baris berurutan di tsql?

  4. Tidak dapat masuk menggunakan otentikasi SQL HANYA dari server jauh

  5. Rusak SQL Server XML dengan karakter Unicode