我有这张表tbl_buku
:
id_buku judul_buku tahun_buku
1 Bioogi 2010
2 Fisika 2010
3 Informatika 2012
4 Kimia 2012
我使用这样的查询,但是我收到错误:
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;
我想要显示这样的表:
tahun_buku judul_buku
2010 Biologi
Fisika
2012 Informatika
Kimia
如何实现这一目标?
答案 0 :(得分:4)
我认为您的查询中的问题是tahun_buku
属于datatype int
而您正试图选择一个空的string
(''
)。
你必须解决方法:
将tahun_buku
更改为varchar
(2010,2012 ..将被视为我不知道的字符串,如果可以的话)
集:
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;
答案 1 :(得分:2)
使用window function lag()
获取上一行的值。
将NULL
用于numeric column中的“空”值 - 例如@apomene already suggested。
空字符串''
只能在text
varchar
或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;
中使用。
在此特定情况下使用character types替换NULL值。
{{1}}