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
Tanpa dapat melihat pertanyaan lengkap, adalah mustahil untuk menghasilkan penyelesaian yangterbaik. Penyelesaian paling mudah ialah menambah kriteria sebagai klausa
HAVING
: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 semua
RTRIM
和CAST
? 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
季节
移动到它们自己的表中,而不是在查询时定义它们。然后它是一个简单的连接到seasons
anda. Saya menggunakan subkueri di sini, tetapi semoga anda mendapat idea:Anda boleh mengulangi keseluruhan kenyataan KES dalam klausa WHERE seperti ini:
Atau anda boleh menggunakan subquery (atau CTE) seperti ini: