Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果值在另一列SQL中相同,则仅显示一条记录_Sql_Sql Server_Select_Duplicates - Fatal编程技术网

如果值在另一列SQL中相同,则仅显示一条记录

如果值在另一列SQL中相同,则仅显示一条记录,sql,sql-server,select,duplicates,Sql,Sql Server,Select,Duplicates,我有一个包含5列的表,如下所示: | ID | NAME | PO_NUMBER | DATE | STATS | | 1 | Jhon | 160101-001 | 2016-01-01 | 7 | | 2 | Jhon | 160101-002 | 2016-01-01 | 7 | | 3 | Jhon | 160102-001 | 2016-01-02 | 7 | | 4 | Jane | 160101-001 | 2016-

我有一个包含5列的表,如下所示:

| ID | NAME | PO_NUMBER | DATE | STATS | | 1 | Jhon | 160101-001 | 2016-01-01 | 7 | | 2 | Jhon | 160101-002 | 2016-01-01 | 7 | | 3 | Jhon | 160102-001 | 2016-01-02 | 7 | | 4 | Jane | 160101-001 | 2016-01-01 | 7 | | 5 | Jane | 160102-001 | 2016-01-02 | 7 | | 6 | Jane | 160102-002 | 2016-01-02 | 7 | | 7 | Jane | 160102-003 | 2016-01-02 | 7 |
我很难得到希望的结果。感谢您的示例数据,您似乎只想显示
采购订单编号
统计数据
,以
001
结尾。如果是这样,这应该是最简单的方法:

select id, name, po_number, date, 
       case when right(po_number, 3) = '001' then stats else null end as stats
from yourtable 

如果您想通过
订购
采购订单号
,那么这里有一个使用
行号
的选项:

select id, name, po_number, date, 
       case when rn = 1 then stats else null end as stats
from (
     select *, row_number() over (partition by name, date order by po_number) as rn
     from yourtable
) t

  • 由于您使用的是SQL 2012,因此可以使用LEAD()或LAG()窗口函数来比较日期值

    select  *,
            STATS = case when t.DATE = LAG(DATE) OVER(ORDER BY ID) 
                         then NULL 
                         else STATS 
                         end
    from    yourtable t
    
    使用下面的代码

      ;with temp as (
                select id,name ,PO_NUMBER ,DATE, STATS,
                LAG (STATS, 1, 0) 
                OVER (PARTITION BY name ,PO_NUMBER ,DATE ORDER BY id) AS PrevSTATS  
                from tableName 
        )
           select id,name ,PO_NUMBER ,DATE,
            case when  STATS = PrevSTATS then null 
                   else     STATS end as STATS  
        from temp  
    

    示例日期2016-01-01重复了三次示例是否正确..您使用的是哪个版本的
    SQL Server
    ?@sandeeprawat是,重复了日期字段value@Squirrelsql server 2012是,在本例中,
    采购订单编号
    具有相同的001结尾。但是我必须根据
    date
    ,说明这是不可能的?@Ricky——第二个例子就是这样做的。看这把小提琴:谢谢@sgedes,我非常感谢你。我也考虑过这一点,但我不认为它能处理一组超过2个的问题。你说的
    一组超过2个是什么意思?示例?还感谢@Squirrel帮助解决了我的问题,在本地我使用了sql 2012,但我不知道在服务器上使用
    
      ;with temp as (
                select id,name ,PO_NUMBER ,DATE, STATS,
                LAG (STATS, 1, 0) 
                OVER (PARTITION BY name ,PO_NUMBER ,DATE ORDER BY id) AS PrevSTATS  
                from tableName 
        )
           select id,name ,PO_NUMBER ,DATE,
            case when  STATS = PrevSTATS then null 
                   else     STATS end as STATS  
        from temp