Saya memiliki tabel dengan 4 kolom dan perlu membuat kolom baru, yang menyatakan bahwa jika untuk kuartal tahun berikutnya ada setidaknya satu data='warna', jadi untuk kuartal ini semua nilai diubah menjadi 'warna. Bagaimana cara melakukannya?

enter image description here

0
Erko Tru 23 Desember 2020, 14:14

3 jawaban

Jawaban Terbaik

Anda dapat menggunakan kondisi dan mendapatkan hitungan tidak untuk setiap kuartal sebagai berikut:

select t.*, 
       case when count(case when data = 'no' then 1 end) 
                  over (partition by year, quarter) > 0 
            then 'nocolour' 
            else data 
       end as new_column
from your_table t
1
Popeye 23 Desember 2020, 11:58

Anda dapat menggunakan fungsi jendela:

select t.*,
    min(data) over(partition by year, quarter) as new_column
from mytable t

Jika ada 'no' untuk kuartal tertentu, new_column mengambil nilai 'no' untuk semua baris kuartal. Ini berfungsi karena dari segi string, 'no' < 'yes'.

1
GMB 23 Desember 2020, 11:16

Dengan asumsi bahwa Anda benar-benar bermaksud "memiliki data = 'yes' dan kuartal berikutnya dan Anda ingin memperbarui tabel, Anda dapat menggunakan:

update t
    set newcolumn = (case when next_max_data = 'yes' then 'colour' else 'no colour')
    from t join
         (select year, quarter, 
                 lead(max(data)) over (order by year, quarter) as next_max_data
          from t
          group by year, quarter
         ) tt
         on t.year = tt.year and t.quater = tt.quarter;

Jika Anda menginginkan kuartal setahun kemudian, Anda akan menggunakan lead(max(data), 4) di subkueri.

0
Gordon Linoff 23 Desember 2020, 12:20