I have this table tbl_buku:
id_buku judul_buku tahun_buku
1 Bioogi 2010
2 Fisika 2010
3 Informatika 2012
4 Kimia 2012
I use query like this, but I am getting an error:
select case when t1.tahun_buku=t2.tahun_buku then ''
else t1.tahun_buku end tahun_buku,t1.judul_buku
from tbl_buku t1 left join tbl_buku t2
on t1.id_buku-1=t2.id_buku;
I want to show table like this:
tahun_buku judul_buku
2010 Biologi
Fisika
2012 Informatika
Kimia
How to achieve this?
I think the problem in your query is that tahun_buku is of datatype int and you are trying to select an empty string ('').
You have to workarounds:
Change tahun_buku to be varchar (2010,2012..will be consider as strings I dont know if it is ok)
Set:
select case when t1.tahun_buku=t2.tahun_buku then null else t1.tahun_buku end tahun_buku,t1.judul_buku
from tbl_buku t1 left join tbl_buku t2
on t1.id_buku-1=t2.id_buku;
Use the window function lag() to get values from the previous row.
Use NULL for "empty" values in a numeric column - like @apomene already suggested.
The empty string '' can only be used in character types like text or varchar.
Use NULLIF() in this particular case to substitute the NULL value.
SELECT NULLIF(lag(tahun_buku) OVER (ORDER BY tahun_buku, judul_buku)
, tahun_buku) AS tahun_buku
, judul_buku
FROM tbl_buku
ORDER BY tahun_buku, judul_buku;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With