Saya ingin mengecualikan rekod yang tidak termasuk dalam julat nilai yang ditentukan dalam kes apabila pernyataan - SQL/MySQL
P粉428986744
P粉428986744 2023-09-11 23:15:24
0
2
481

Saya cuba menetapkan julat bermusim untuk tarikh tertentu daripada jadual DTBL_SCHOOL_DATES. Di bawah ialah logik saya yang menetapkan musim dalam julat tertentu berdasarkan tahun dan wilayahnya.

CASE WHEN RTRIM(dtbl_school_dates.local_school_year) = '2021-2022' THEN CASE WHEN RTRIM(dtbl_schools_ext.region) = 'Bay Area' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '08/07/2021' and '09/08/2021' THEN 'FALL' WHEN RTRIM(dtbl_schools_ext.region) = 'Bay Area' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '11/27/2021' and '12/15/2021' THEN 'WINTER' WHEN RTRIM(dtbl_schools_ext.region) = 'Bay Area' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '03/04/2022' and '03/22/2022' THEN 'SPRING' WHEN RTRIM(dtbl_schools_ext.region) = 'Central Valley' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '07/31/2021' and '09/01/2021' THEN 'FALL' WHEN RTRIM(dtbl_schools_ext.region) = 'Central Valley' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '11/27/2021' and '12/15/2021' THEN 'WINTER' WHEN RTRIM(dtbl_schools_ext.region) = 'Central Valley' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '02/19/2022' and '03/08/2022' THEN 'SPRING' WHEN RTRIM(dtbl_schools_ext.region) = 'Los Angeles' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '08/14/2021' and '09/15/2021' THEN 'FALL' WHEN RTRIM(dtbl_schools_ext.region) = 'Los Angeles' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '11/27/2021' and '12/15/2021' THEN 'WINTER' WHEN RTRIM(dtbl_schools_ext.region) = 'Los Angeles' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '03/04/2022' and '03/22/2022' THEN 'SPRING' ELSE 'NOT IN RANGE' END ELSE FTBL_TEST_SCORES.test_admin_period END AS "C4630"

Tetapi apabila tarikh tidak berada dalam julat yang dinyatakan dalam logik, saya mahu tarikh itu diabaikan. AKA nilai "luar julat" harus dikecualikan. Saya cuba menggunakan FTBL_TEST_SCORES.test_admin_period bukan batal dan kerana tiada nilai dalam pangkalan data adalah batal, ia tidak akan berfungsi.

Nilai yang tidak berada dalam julat harus dikecualikan daripada hasilnya, bagaimana saya boleh mencapai ini dalam klausa where

Saya cuba mengehadkan menggunakan Alias tetapi tidak berjaya. Saya tidak pasti sama ada mungkin untuk memberikan nilai kepada medan tertentu dalam pernyataan kes, seperti Kes apabila 'a' kemudian medan ='B' tamat

Nilai yang tidak berada dalam julat harus dikecualikan daripada keputusan, bagaimana saya boleh mencapai ini dalam klausa where

P粉428986744
P粉428986744

membalas semua (2)
P粉083785014

Tanpa dapat melihat pertanyaan lengkap, adalah mustahil untuk menghasilkan penyelesaian yangterbaik. Penyelesaian paling mudah ialah menambah kriteria sebagai klausaHAVING:

HAVING `C4630` <> 'NOT IN RANGE'

Saya keliru tentang format tarikh anda. Jika ini sepatutnya pertanyaan MySQL, mereka harus dalam format yyyy-mm-dd. Boleh dikatakan, mereka harus dalam format ini walaupun pada SQL Server yang menyokong format tarikh asli yang tidak jelas.

Kenapa mereka semuaRTRIMCAST? Data harus disimpan dalam format yang betul dan dibersihkan pada input, jika ini tidak mungkin, bersihkan data dengan kerap dan bukannya untuk setiap pertanyaan.

Adalah bijak untuk menggerakkan季节移动到它们自己的表中,而不是在查询时定义它们。然后它是一个简单的连接到seasonsanda. Saya menggunakan subkueri di sini, tetapi semoga anda mendapat idea:

SELECT /* other columns */ COALESCE(seasons.season, FTBL_TEST_SCORES.test_admin_period) AS `C4630` FROM all_the_other_tables LEFT JOIN ( SELECT 'Bay Area' AS region, 'FALL' AS season, '2021-08-07' AS start, '2021-09-08' AS end UNION ALL SELECT 'Bay Area' , 'WINTER' , '2021-11-27' , '2021-12-15' UNION ALL SELECT 'Bay Area' , 'SPRING' , '2022-03-04' , '2022-03-22' UNION ALL SELECT 'Central Valley' , 'FALL' , '2021-07-31' , '2021-09-01' UNION ALL SELECT 'Central Valley' , 'WINTER' , '2021-11-27' , '2021-12-15' UNION ALL SELECT 'Central Valley' , 'SPRING' , '2022-02-19' , '2022-03-08' UNION ALL SELECT 'Los Angeles' , 'FALL' , '2021-08-14' , '2021-09-15' UNION ALL SELECT 'Los Angeles' , 'WINTER' , '2021-11-27' , '2021-12-15' UNION ALL SELECT 'Los Angeles' , 'SPRING' , '2022-03-04' , '2022-03-22' ) AS seasons ON dtbl_school_dates.local_school_year = '2021-2022' AND dtbl_schools_ext.region = seasons.region AND dtbl_school_dates.date_value BETWEEN seasons.start AND seasons.end WHERE ( (dtbl_school_dates.local_school_year = '2021-2022' AND seasons.season IS NOT NULL) OR dtbl_school_dates.local_school_year <> '2021-2022' );
    P粉718165540

    Anda boleh mengulangi keseluruhan kenyataan KES dalam klausa WHERE seperti ini:

    select case when x then y when a then b when c then d else 'NOT IN RANGE' end as foo from table t where case when x then y when a then b when c then d else 'NOT IN RANGE' end <> 'NOT IN RANGE'

    Atau anda boleh menggunakan subquery (atau CTE) seperti ini:

    select * from ( select case when x then y when a then b when c then d else 'NOT IN RANGE' end as foo from table t ) where foo <> 'NOT IN RANGE'
      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!