对于理想的处理,我正在寻找一种能够显示相应值的解决方案 从2或3列只有一次。
看一下这个例子
**id** **customer_number** **customer_name** **product_id**
=============================================== =============================
1 12345 Jerry 123
2 12345 Jerry 124
3 12345 Jerry 125
4 12345 Jerry 126
5 12345 Jerry 127
现在我想要的是显示第2行到第5行,其中列customer_number和customer_name上的值为NULL
但product_id必须相同
可能吗?
答案 0 :(得分:1)
正如MikeSherrill'CatRecall所说,这不是数据库功能。它可以是用于查询数据库的客户端工具的一项功能。 Oracle sqlplus
能够做到这一点(我不再记得如何,但它不是你提出的问题),但是AFAIK,PostgreSQL psql
不是。
你必须做一些程序来实现这一点,只需选择你喜欢的语言,因为PostgreSQL与主要程序语言(Python,Perl,Java,C,C ++,Ruby,...)的界面非常好。< / p>
答案 1 :(得分:1)
这个可以在数据库中完成,虽然我同意其他人在前端做得更好:
select id,
case
when lag(customer_number) over (order by id) = customer_number then null
else customer_number
end as customer_number,
case
when lag(customer_name) over (order by id) = customer_name then null
else customer_name
end as customer_name,
product_id
from the_table
order by id;
SQLFiddle示例:http://sqlfiddle.com/#!15/700f9/1