2016-03-02 47 views
1

我的客戶擁有來自不同產品組的產品。例如:優先客戶羣

Client Product group 
1  All-in-one 
1  Senior 
2  All-in-one 
2  Other 
3  Senior 
3  Other 
4  Other 

產品組優先級,因此,如果您自己的產品無論從所有功能於一身的,你會被歸類高級產品組對所有爲所有功能於一身的客戶。

優先考慮的產品類別爲:

  1. 所有功能於一身的
  2. 高級
  3. 其他

我想一個視圖,其中每個客戶只能出現一次,如:

Client Product group 
1  All-in-one 
2  All-in-one 
3  Senior 
4  Other 

這可以嗎沒有大量的意見一步完成?

+0

需要檢測優先級,其產品組保持當客戶有兩個? – TheGameiswar

+0

@TheGameiswar是的,正好。對不起,如果不明確 – Mette

回答

1

第一個作品如果只是這些產品組依然存在,第二個你的flexibilty訂購,但使用的CTE

select id,min(pg) from #client 
group by id 

;with cte 
as 
(
select 
id, 
min(case when pg='All-in-one' then 1 
when pg='senior' then 2 
when pg='other' then 3 
end) pg 
from 
#client 
group by id 
) 
select id, 
case pg when 1 then 'All-in-one' 
    when 2 then 'Senior' 
    when 3 then 'other' 
end as 'PG' 
from cte 
0

試試這個(你不需要使用clients_groups CTE,因爲你有這個表的話):

;WITH clients_groups AS (
SELECT * 
FROM (VALUES 
(1, 'All-in-one'), 
(1, 'Senior'), 
(2, 'All-in-one'), 
(2, 'Other'), 
(3, 'Senior'), 
(3, 'Other'), 
(4, 'Other')) as cg (Client, Product_group) 
), 
final AS (
SELECT ROW_NUMBER() OVER(PARTITION BY Client ORDER BY id Asc) AS R,g.Client, p.Name 
FROM clients_groups g 
LEFT JOIN (VALUES 
(1, 'All-in-one'), 
(2, 'Senior'), 
(3, 'Other')) as p(id, name) ON g.Product_group = p.name) 

SELECT Client,Name 
FROM final 
WHERE R = 1 

結果:

Client  Name 
----------- ---------- 
1   All-in-one 
2   All-in-one 
3   Senior 
4   Other 

(4 row(s) affected)