de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Pranav Shah
Pranav Shah
Question

Oracle SQL - CASE dalam klausa WHERE

Apakah mungkin untuk melakukan hal ini?

WITH T1 AS
(
   SELECT 1 AS SEQ, 'NOTHING 1' AS SOME_TYPE FROM DUAL UNION ALL
   SELECT 2 AS SEQ, 'NOTHING 2' AS SOME_TYPE FROM DUAL UNION ALL
   SELECT 3 AS SEQ, 'SOMETHING 1' AS SOME_TYPE FROM DUAL UNION ALL
   SELECT 4 AS SEQ, 'SOMETHING 2' AS SOME_TYPE FROM DUAL UNION ALL
   SELECT 5 AS SEQ, 'SOMETHING 3' AS SOME_TYPE FROM DUAL UNION ALL
   select 6 as seq, 'SOMETHING 4' AS SOME_TYPE from dual
)
, T2 AS
(
   SELECT 'A' AS COMPARE_TYPE FROM DUAL UNION ALL
   SELECT 'B' AS COMPARE_TYPE FROM DUAL 
)
SELECT T2.*, T1.* 
FROM T1, T2
WHERE  CASE T2.COMPARE_TYPE 
         WHEN 'A'
            THEN T1.SOME_TYPE LIKE 'NOTHING%'
         ELSE T1.SOME_TYPE NOT LIKE 'NOTHING%' 
      END

Saya tahu bahwa klausa WHERE is saya tidak benar.

Bantuan apa pun akan sangat bagus untuk mengetahui apakah jenis pernyataan ini mungkin.

Saya tidak ingin menulis SQL Dinamis. Jika saya harus menulis 2 pernyataan SQL yang berbeda.

Terima kasih

6 2011-02-10T23:42:46+00:00 3
Leigh Riffel
Leigh Riffel
Pertanyaan edit 23 September 2013 в 7:18
Administrator Basis Data
oracle
case
Solution / Answer
Justin Cave
Justin Cave
11 Februari 2011 в 12:00
2011-02-11T00:00:54+00:00
Lebih
Sumber
Sunting
#13848785

Terima kasih telah memposting data sampel. Akan sangat membantu juga untuk menjelaskan dengan kata-kata dan dengan output aktual apa yang ingin Anda kembalikan oleh kueri Anda.

Saya menebak bahwa Anda menginginkan sesuatu seperti

SQL> ed
Wrote file afiedt.buf

  1  WITH T1 AS
  2  (
  3  SELECT 1 AS SEQ, 'NOTHING 1' AS SOME_TYPE FROM DUAL UNION ALL
  4  SELECT 2 AS SEQ, 'NOTHING 2' AS SOME_TYPE FROM DUAL UNION ALL
  5  SELECT 3 AS SEQ, 'SOMETHING 1' AS SOME_TYPE FROM DUAL UNION ALL
  6  SELECT 4 AS SEQ, 'SOMETHING 2' AS SOME_TYPE FROM DUAL UNION ALL
  7  SELECT 5 AS SEQ, 'SOMETHING 3' AS SOME_TYPE FROM DUAL UNION ALL
  8  select 6 as seq, 'SOMETHING 4' AS SOME_type from dual
  9  )
 10  , T2 AS
 11  (
 12  SELECT 'A' AS COMPARE_TYPE FROM DUAL UNION ALL
 13  SELECT 'B' AS COMPARE_type FROM DUAL
 14  )
 15  SELECT T2.*, T1.*
 16    FROM T1, T2
 17   WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND
 18                    T1.SOME_TYPE LIKE 'NOTHING%'
 19                 THEN 1
 20               WHEN T2.COMPARE_TYPE != 'A' AND
 21                    T1.SOME_TYPE NOT LIKE 'NOTHING%'
 22                 THEN 1
 23               ELSE 0
 24*           END) = 1
SQL> / 

C        SEQ SOME_TYPE
- ---------- -----------
A          1 NOTHING 1
A          2 NOTHING 2
B          3 SOMETHING 1
B          4 SOMETHING 2
B          5 SOMETHING 3
B          6 SOMETHING 4

6 rows selected.

Tetapi saya membuat banyak tebakan tentang apa maksud kode Anda.

Hal ini tampaknya identik dengan pertanyaan yang diajukan seseorang di forum OTN. Jawaban saya sama di kedua tempat tersebut.

12
0
Eric  Humphrey - lotsahelp
Eric Humphrey - lotsahelp
11 Februari 2011 в 12:04
2011-02-11T00:04:51+00:00
Lebih
Sumber
Sunting
#13848786

Cobalah menulis klausa where dengan cara ini:

WHERE (T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%')
   OR (T2.COMPARE_TYPE <> 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%')
Leigh Riffel
Leigh Riffel
Jawaban edit 11 Februari 2011 в 6:03
6
0
Leigh Riffel
Leigh Riffel
11 Februari 2011 в 4:06
2011-02-11T16:06:45+00:00
Lebih
Sumber
Sunting
#13848787

Pertanyaan Justin Cave dan Eric Humphrey'keduanya memberikan hasil yang berbeda. Berikut ini adalah jawaban ketiga yang sama validnya yang memberikan hasil ketiga yang berbeda:

WHERE (T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%')
OR T1.SOME_TYPE NOT LIKE 'NOTHING%' 

Hanya Anda yang akan tahu jawaban mana yang memberikan hasil yang Anda harapkan, tetapi semuanya adalah jawaban yang benar untuk pertanyaan yang diberikan.

Pertanyaan Anda lebih baik daripada banyak pertanyaan lainnya karena pertanyaan Anda berisi sendiri dan menyertakan sumber data, tetapi akan membantu jika Anda menyertakan output yang Anda cari juga. Saya sarankan Anda menambahkannya ke pertanyaan dan pastikan jawaban yang diterima sesuai dengan hasil tersebut.

4
0
Related communities 3
Oracle Indonesia
Oracle Indonesia
769 pengguna
Group belajar, diskusi, dan berbagi tentang berbagai produk dan teknologi Oracle. Disclaimer: This group is not in any affilation nor maintained by the Oracle.
Buka telegram
OrcV2 🇲🇨Indonesia🇮🇩
OrcV2 🇲🇨Indonesia🇮🇩
164 pengguna
Website : https://orcv2token.tech/ Tg Global : https//t.me/orcv2
Buka telegram
Oracle_id
Oracle_id
61 pengguna
Oracle_id adalah komunitas Penikmat Oracle seluruh Indonesia, fokus membahas product2 Oracle
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 2 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
© de-vraag 2022
Sumber
dba.stackexchange.com
di bawah lisensi cc by-sa 3.0 dengan atribusi