如果相同的cust有不同的产品如何放单旗

时间:2017-07-04 07:18:33

标签: sql-server

让我解释一下我的要求是什么。我需要检查我是否有不同productid的客户,如果是,那么我必须检查他们是否有任何producttype null或者如果任何customerid有NULL producttype然后标志为customerid应该是N否Y

例如:我有一张桌子,其中有很多列。 PFB表结构

Customerid   productid  producttype 

  1             a             x
  1             b            Null
  2             c             y
  2             d             y
  3             e             z
  3             f            Null

我想要的是如下:

Customerid  Productid   Productype  flag

1             a           x           N
1             b          Null         N
2             c           y           Y                       
2             d           y           Y
3             e           z           N
3             f          Null         N

到现在为止我做了什么

;with cte as
(

select * from test where customerid  in 

(select  customerid  from test  group by customerid having count(*) >1

) )

从此我收集所有拥有多个产品和不同产品的客户,现在我想添加标志部分。

如果这种方法很好,请告诉我,如何实现下一步。

提前致谢!!

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。我曾经使用过CTE但内部查询较复杂。 试试这个:

Create table #temp(Customerid int,   productid varchar(1), producttype varchar(1))
insert into #temp values
  (1,'a','x'),   
  (1,'b',Null),
  (2,'c','y'),   
  (2,'d','y'),   
  (3,'e','z'),   
  (3,'f',Null)


;with cte as
(
select distinct customerid, 'T' as tempflag from #temp where  producttype is null 
)
Select b.*,
case  a.tempflag when 'T' then 'N' else 'Y' end as Flag
 from cte a
right join #temp b
on a.customerid = b.customerid

输出:

Customerid  productid producttype Flag
----------- --------- ----------- ----
1           a         x           N
1           b         NULL        N
2           c         y           Y
2           d         y           Y
3           e         z           N
3           f         NULL        N