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
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.
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%')
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.