JOIN koşulunda CASE deyimini kullanabilir miyim?
Aşağıdaki görüntü Microsoft SQL Server 2008 R2 Sistem Görünümleri'nin bir parçasıdır. Resimden sys.partitions
ve sys.allocation_units
arasındaki ilişkinin sys.allocation_units.type
değerine bağlı olduğunu görebiliriz. Dolayısıyla, bunları birleştirmek için şuna benzer bir şey yazardım:
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
Ancak üstteki kod sözdizimi hatası veriyor. Sanırım bunun nedeni CASE
ifadesi.
Birisi biraz açıklamaya yardımcı olabilir mi?
Hata mesajı ekleyin:
Msg 102, Düzey 15, Durum 1, Satır 6 '=' yakınında hatalı sözdizimi.
118
3
Bir
CASE
ifadesi, cümleninTHEN
kısmından bir değer döndürür. Bunu şu şekilde kullanabilirsiniz:Dönen değerle bir şey yapmanız gerektiğine dikkat edin, örneğin 1 ile karşılaştırın. İfadeniz bir atamanın değerini döndürmeye veya eşitliği test etmeye çalıştı, bunların ikisi de
CASE
/THEN
cümlesi bağlamında mantıklı değildir. (EğerBOOLEAN
bir veri tipi olsaydı, o zaman eşitlik testi mantıklı olurdu).Bu bağlantıyı SQL Server'da Koşullu Birleştirmeler ve https://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause adresini incelemenizi öneririm.
Örneğin.
Düzenleme: Yorumlara göre.
Bunu dene: