Postgresql:对应的值只有一次

时间:2014-09-16 15:23:57

标签: postgresql

对于理想的处理,我正在寻找一种能够显示相应值的解决方案 从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必须相同

可能吗?

2 个答案:

答案 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