如果值在另一列SQL中相同,则仅显示一条记录
我有一个包含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 |如果值在另一列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-
我很难得到希望的结果。感谢您的示例数据,您似乎只想显示
采购订单编号
的统计数据
,以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