2015-07-21 107 views
0

我无法找到一种方法来做类似于这个例子的案例。我援引他的知识! 我每个月都收到一些新颖的东西,包括A到E的信件,我需要在每个客户的大写字母中写0。所以如果我只收到B,那么B = 0,如果我收到A和B,那么A = 1,B = 0,如果我收到A,B,C,则A = 1,B = 1,C = 0,收到A和C,然后A = 1和C = 0,其客户组。SQL Server复杂案例

Customer Codes 
111  A  
111  B  
111  C  
222  A   
222  B  
333  A  
+1

我不知道你是想说......你能请出示一些样品的结果是什么? – Siyual

+1

你能告诉我们你到目前为止做了什么吗? – Marusyk

+1

“这个例子”是否意味着链接到别的地方?如果是这样,你已经忘记包含它。请[编辑]你的问题补充一点。 –

回答

1
In the below SQl you're doing some row number functions and then ordering by the highest row number. After that you do another row number function by the highest row_number it gets in the cte. 

With myCte 
as 
(
Select Customer,Code,Row_Number() OVER (PARTITION BY Customer Order By Code) rn 
from myTable 

) 
select Customer,Code, 
Case when rn2 = 1 then 0 
else 1 
end as myArbitraryNumber 
from 
(
select Customer, Code, rn, Row_Number() OVER (Partition by Customer,rn Order by rn DESC) rn2 
from myCte 
) 
+1

这是我的问题的正确答案。我添加了desc代码,因为我需要在零的最大值。并用别名声明了最后一个临时表。谢谢!。这是最后一个例子:随着myCte 为 ( 选择客户,代码,ROW_NUMBER()OVER(PARTITION BY客户订单通过编码描述)RN 从#myTable ) 选择客户,代码, 情况下,当RN = 1,则0 别的1周 端作为myArbitraryNumber 从 ( 选择客户,代码,RN,ROW_NUMBER()OVER(由顾客分区,由RN DESC从myCte 氡顺序)RN2 ) 为t – Betzero