Postgresql:只对应一次值

Postgresql:只对应一次值,postgresql,Postgresql,对于理想的处理方式,我正在寻找一种能够显示相应值的解决方案 仅从2或3列中删除一次 看看这个例子 **id** **customer_number** **customer_name** **product_id** ============================================================================ 1 12345 Je

对于理想的处理方式,我正在寻找一种能够显示相应值的解决方案 仅从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\u number和customer\u name列上的值为NULL

但产品id必须相同


这可能吗?

正如MikeSherrill'CatRecall'所说,这不能是数据库功能。它可以是用于查询数据库的客户机工具的一项功能。Oracle
sqlplus
能够做到这一点(我不记得是怎么做到的,但这不是你要求的),但好吧,PostgreSQL
psql
不行

你必须做一些程序来选择你喜欢的语言,因为PostgreSQL与主要程序语言(Python,Perl,java,C++,露比,……)的接口非常好。

< P>这可以在数据库中完成,尽管我同意其他的,这在前端是更好的:

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;

SQLFIDLE示例:

您的问题没有意义。产品id不同。此类需求通常在报表编写器或应用程序代码中处理,而不是在SQL中处理。数据库(和SQL)更关心数据是什么,而不关心数据的显示方式。这只是因为产品id不一样!:)您可以使用SQL实现这一点。但我同意这应该在前端完成。好把戏!但我认为我还是会在前端这样做,因为在现实世界中,数据库通常是一个负载沉重的资源,数据库管理员不愿意在他们的数据库上看到这一点,并向编写者开枪:-)