Saya mencoba mencari di sekitar, tetapi saya tidak dapat menemukan apa pun yang dapat membantu saya.
Saya mencoba melakukan ini dalam SQL:
declare @locationType varchar(50);
declare @locationID int;
SELECT column1, column2
FROM viewWhatever
WHERE
CASE @locationType
WHEN 'location' THEN account_location = @locationID
WHEN 'area' THEN xxx_location_area = @locationID
WHEN 'division' THEN xxx_location_division = @locationID
Saya tahu bahwa saya tidak harus meletakkan '= @locationID' di akhir masing-masing, tetapi saya tidak bisa mendapatkan sintaks yang hampir benar. SQL terus mengeluh tentang '=' saya di baris KETIKA pertama ...
Bagaimana saya bisa melakukan ini?
sql
switch-statement
case
Miles
sumber
sumber
tanpa pernyataan kasus ...
sumber
DECLARE @locationType NVARCHAR(50) = 'youchoose' IF @locationType = 'location' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (account_location = @locationID) END IF @locationType = 'area' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_area = @locationID) END IF @locationType = 'division' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_division = @locationID) END
Ini dia
sumber
Saya akan mengatakan ini adalah indikator struktur tabel yang cacat. Mungkin tipe lokasi yang berbeda harus dipisahkan dalam tabel yang berbeda, memungkinkan Anda untuk melakukan lebih banyak permintaan yang lebih kaya dan juga menghindari adanya kolom yang berlebihan.
Jika Anda tidak dapat mengubah struktur, sesuatu seperti di bawah ini mungkin berfungsi:
Dan seterusnya ... Kami tidak dapat mengubah struktur kueri dengan cepat, tetapi kami dapat menimpanya dengan membuat predikatnya seimbang.
EDIT: Saran di atas tentu saja jauh lebih baik, abaikan saja saran saya.
sumber
Masalah dengan ini adalah bahwa ketika mesin SQL pergi untuk mengevaluasi ekspresi, ia memeriksa bagian FROM untuk menarik tabel yang tepat, dan kemudian bagian WHERE untuk memberikan beberapa kriteria dasar, sehingga tidak dapat dengan benar mengevaluasi kondisi dinamis di mana kolom untuk periksa.
Anda dapat menggunakan klausa WHERE ketika Anda memeriksa kriteria WHERE dalam predikat, seperti
jadi dalam kasus khusus Anda, Anda perlu memasukkan kueri ke dalam prosedur tersimpan atau membuat tiga kueri terpisah.
sumber
ATAU operator dapat menjadi alternatif case ketika dalam kondisi dimana
sumber
Silakan coba kueri ini. Jawab untuk posting di atas:
sumber
Coba ini:
sumber
sumber
sumber
Coba kueri ini. Sangat mudah dimengerti:
sumber