Gambar berikut adalah bagian dari Tampilan Sistem Microsoft SQL Server 2008 R2. Dari gambar tersebut kita dapat melihat bahwa hubungan antara sys.partitions
dansys.allocation_units
tergantung pada nilai sys.allocation_units.type
. Jadi untuk bergabung dengan mereka, saya akan menulis sesuatu yang mirip dengan ini:
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
Tetapi kode bagian atas memberikan kesalahan sintaksis. Saya kira itu karenaCASE
pernyataan itu. Adakah yang bisa menjelaskan sedikit?
Tambahkan pesan kesalahan:
Msg 102, Level 15, Negara 1, Baris 6 Sintaks salah dekat '='.
sql
sql-server
join
case
Pelajar saja
sumber
sumber
Jawaban:
Sebuah
CASE
ekspresi mengembalikan nilai dariTHEN
bagian klausa. Anda dapat menggunakannya sebagai berikut:Perhatikan bahwa Anda perlu melakukan sesuatu dengan nilai yang dikembalikan, misalnya membandingkannya dengan 1. Pernyataan Anda berupaya mengembalikan nilai tugas atau menguji kesetaraan, yang keduanya tidak masuk akal dalam konteks a
CASE
/THEN
klausa. (JikaBOOLEAN
itu tipe data maka tes untuk kesetaraan akan masuk akal.)sumber
= 1
menjadi= 0
, tetapi saya tidak berpikir Anda akan menyukai hasilnya.Saya sarankan Anda untuk pergi melalui tautan ini Conditional Joins di SQL Server dan T-SQL Case Statement dalam JOIN ON Clause
misalnya
Sunting: Sesuai komentar.
sumber
conditional join
artinya Setiap bergabung (tidak termasuk salib) adalah persyaratan. Bagaimana kasus ini berbeda dari yang lain? Sampel Anda memiliki gabungan dengan kondisi, serta kueri OP telah bergabung dengan kondisi.OR
?OR
". MenggunakanOR
hanyalah satu cara untuk mengimplementasikannya.OR
dan 2ANDs
atau dengan 1CASE
. Ini adalah kueri rutin yang tidak memiliki apa pun yang membedakannya dari yang lain.Coba ini:
sumber
Saya pikir Anda perlu dua pernyataan kasus:
Hal ini karena:
sumber
Saya mengambil contoh Anda dan mengeditnya:
sumber
Ini sepertinya bagus
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition
sumber
Ya kamu bisa. Berikut ini sebuah contoh.
sumber
Mengambil contoh DonkeyKong.
Masalahnya adalah saya perlu menggunakan variabel yang dideklarasikan. Ini memungkinkan untuk menyatakan sisi kiri dan kanan Anda tentang apa yang perlu Anda bandingkan. Ini untuk mendukung laporan SSRS di mana bidang yang berbeda harus ditautkan berdasarkan pilihan oleh pengguna.
Kasing awal menetapkan pilihan bidang berdasarkan pilihan dan kemudian saya dapat mengatur bidang yang harus saya cocokkan untuk bergabung.
Pernyataan kasus kedua dapat ditambahkan untuk sisi kanan jika variabel diperlukan untuk memilih dari bidang yang berbeda
sumber
Di sini saya telah membandingkan perbedaan dalam dua set hasil yang berbeda:
sumber