我有一个调查表,其中有人被问到大约5个问题。这些问题中有4个是相同的问题,但是由于他们了解自己的购买方式,因此答案的选择也有所不同。
以下是问题:
ID Question qid Answer
101005 what brands did you purchase the past 5 months 1 Coca-Cola or Pepsi or Dr.Pepper
101005 what brands did you purchase the past 5 months 1 Dr.Pepper
101005 what brands did you purchase the past 5 months 1 store brand
101005 what brands did you purchase the past 5 months 1 Coca-Cola
101005 how many people live in your house 4 4
101005 what is your prefer retailers 8 walmart
目标是根据他们的答案创建四个额外的列,并将它们分配为1或0。由于此人的答案是可口可乐,因此我想在current_buyer列中分配它们,并给它们1和0是new_buyer列。我还想确保即使他在第二行回答了Dr.Pepper,它仍然将他识别为current_buyer。同样,我想在第3列中将此人分配为饮酒者,在潜在客户中将第4列分配为0。
这是表格的外观
ID Question qid answer Current_buyer New_buyer drinker prospect
101005 what brands did you purchase the past 5 months 1 Coca-Cola or Pepsi or Dr.Pepper 1 0 1 0
101005 what brands did you purchase the past 5 months 1 Dr.Pepper 1 0 1 0
101005 how many people live in your house 4 4 1 0 1 0
目标是查看ID在过去5个月中是否购买了可口可乐,他们是当前的购买者(1)和饮酒者(1),并且在整个配置文件中将有(0)个new_buyer和有前景的人。
这是我尝试的代码:
select ID,qid,question,answer,s_date,
Case when Sum(Case when [answer] like'%coca-cola%' then 1 else 0 end)>=1 then 1
else 0 end current_buyer
,Case when Sum(Case when [answer] like'%coca-cola%' then 1 else 0 end)=0 then 1
else 0 end New_buyer
,Case when Sum(Case when [answer] like'%coca-cola,Dr.pepper,pepsi%' then 1 else 0 end)>=1 then 1
else 0 end drinker
,Case when Sum(Case when [answer] like'%coca-cola,Dr.pepper,pepsi%' then 1 else 0 end)=0 then 1
else 0 end Prospect
不幸的是,即使人们选择了可口可乐,使用此代码我在饮酒者栏中也得到0。任何帮助将不胜感激。
答案 0 :(得分:1)
我不是100%确定我理解分配各种值背后的逻辑,但总的来说,您似乎是基于多个行的聚合来分配值。因此,您需要先进行汇总(在本例中为CTE),然后再加入查询中。
还值得注意的是,即使您正在使用LIKE运算符进行匹配-[%]字符之间的所有内容都需要与[answer]中的某处完全匹配。我认为这不是您想要的-所以我将它们分开了。但是,我不确定100%是否完全掌握了逻辑运算符。
您需要类似的东西吗?
;with analysisCTE as (select ID,qid,
Case when Sum(Case when [answer] like'%coca-cola%' then 1 else 0 end)>=1 then 1
else 0 end current_buyer
,Case when Sum(Case when [answer] like'%coca-cola%' then 1 else 0 end)=0 then 1
else 0 end New_buyer
,Case when Sum(Case when [answer] like'%coca-cola%' OR [answer] like '%Dr.pepper%' OR [answer] like '%pepsi%' then 1 else 0 end)>=1 then 1
else 0 end drinker
,Case when Sum(Case when [answer] like'%coca-cola%' OR [answer] like '%Dr.pepper%' OR [answer] like '%pepsi%' then 1 else 0 end)=0 then 1
else 0 end Prospect
from drinks
group by id, qid)
select d.ID,d.qid,d.question,d.answer, a.current_buyer, a.New_buyer, a.drinker, a.Prospect
from drinks d
inner join analysisCTE a on d.id = a.id and d.qid = a.qid