Saya bekerja dengan kueri yang berisi pernyataan "KASUS" dalam klausa "DI MANA". Tetapi SQL Server 2008 memberikan beberapa kesalahan saat menjalankannya. Adakah yang bisa membantu saya dengan pertanyaan yang benar? Berikut pertanyaannya:
SELECT
tl.storenum 'Store #',
co.ccnum 'FuelFirst Card #',
co.dtentered 'Date Entered',
CASE st.reasonid
WHEN 1 THEN 'Active'
WHEN 2 THEN 'Not Active'
WHEN 0 THEN st.ccstatustypename
ELSE 'Unknown'
END 'Status',
CASE st.ccstatustypename
WHEN 'Active' THEN ' '
WHEN 'Not Active' THEN ' '
ELSE st.ccstatustypename
END 'Reason',
UPPER(REPLACE(REPLACE(co.personentered,'RT\\\\',''),'RACETRAC\\\\','')) 'Person Entered',
co.comments 'Comments or Notes'
FROM
comments co
INNER JOIN cards cc ON co.ccnum=cc.ccnum
INNER JOIN customerinfo ci ON cc.customerinfoid=ci.customerinfoid
INNER JOIN ccstatustype st ON st.ccstatustypeid=cc.ccstatustypeid
INNER JOIN customerstatus cs ON cs.customerstatuscd=ci.customerstatuscd
INNER JOIN transactionlog tl ON tl.transactionlogid=co.transactionlogid
LEFT JOIN stores s ON s.StoreNum = tl.StoreNum
WHERE
CASE LEN('TestPerson')
WHEN 0 THEN co.personentered = co.personentered
ELSE co.personentered LIKE '%TestPerson'
END
AND cc.ccnum = CASE LEN('TestFFNum')
WHEN 0 THEN cc.ccnum
ELSE 'TestFFNum'
END
AND CASE LEN('2011-01-09 11:56:29.327')
WHEN 0 THEN co.DTEntered = co.DTEntered
ELSE
CASE LEN('2012-01-09 11:56:29.327')
WHEN 0 THEN co.DTEntered >= '2011-01-09 11:56:29.327'
ELSE co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327'
END
END
AND tl.storenum < 699
ORDER BY tl.StoreNum
sql
sql-server
case
pengguna1018213
sumber
sumber
Jawaban:
Pertama,
CASE
pernyataan itu harus menjadi bagian dari ekspresi, bukan ekspresi itu sendiri.Dengan kata lain, Anda dapat memiliki:
Tetapi itu tidak akan berfungsi seperti yang Anda tulis, misalnya:
Anda mungkin lebih beruntung menggunakan pernyataan ATAU gabungan seperti ini:
Meskipun, bagaimanapun, saya tidak yakin seberapa hebat rencana kueri yang akan Anda dapatkan. Jenis kejahatan ini dalam
WHERE
klausa sering kali akan mencegah pengoptimal kueri menggunakan indeks.sumber
co.personentered
tidak null, di opsi 1 dan 2. Sekarang opsi 3 sudah cukup. Tapi aku ingin tahu itu ... !!where case c when 1 then (DescriptionCode is null) else descriptioncode is not null end
, tetapi saya menunjukkan kesalahan sepertiIncorrect syntax near the keyword 'is'.
Ini seharusnya menyelesaikan masalah Anda untuk saat ini tetapi saya harus mengingatkan Anda bahwa ini bukan pendekatan yang baik:
sumber
Coba yang berikut ini:
sumber
Saya pikir awal kueri Anda akan terlihat seperti itu:
TAPI
apa yang ada di buntut sama sekali tidak bisa dimengerti
sumber
Ada
WHERE
bagian yang bisa ditulis seperti ini:sumber
Anda juga bisa mencoba seperti di bawah ini misalnya. untuk hanya menampilkan Kiriman Keluar
sumber
Terima kasih atas pertanyaan ini, sebenarnya saya mencari sesuatu yang lain yang ada di kueri di bawah ini. ini dapat membantu seseorang.
query di atas adalah untuk mengisi dropdown yang menunjukkan nilai kosong sebagai "(blank)". Juga jika kita meneruskan nilai ini ke sql di mana klausa untuk mendapatkan nilai kosong dengan nilai lain, saya tidak tahu bagaimana menanganinya. Dan akhirnya muncul solusi di bawah ini, ini dapat membantu seseorang.
ini dia ,
sumber
inilah solusi saya
Regads Davy
sumber
Ini bekerja
sumber
Coba yang berikut ini:
sumber
sumber
Gunakan dengan cara ini.
sumber