用SQL如何分类统计表中某字段的变化次数? 15

我的数据表格式如下:客户编号产品代号100111001110013100121002310022100221002110023客户编号1001的产品代号变化顺序依次为1、... 我的数据表格式如下:
客户编号 产品代号
1001 1
1001 1
1001 3
1001 2
1002 3
1002 2
1002 2
1002 1
1002 3

客户编号1001的产品代号变化顺序依次为1、3、2,则变化次数为3
客户编号1002的产品代号变化顺序依次为3、2、1、3,则变化次数为4

如果通过SQL语句统计出每个客户编号的产品代号变化次数,即运行结果为:

客户编号 变化次数
1001 3
1001 4

请高手支招,谢谢!
展开
 我来答
wylxl99
2011-11-25 · TA获得超过364个赞
知道小有建树答主
回答量:264
采纳率:0%
帮助的人:119万
展开全部
明确一个问题,产品代码会不会和原来的想重复。如,客户编号1001的产品代号变化顺序依次为1、3、2,再后来会不会出现1 。
@如果不会重复的话
SELECT 客户编号,COUNT(DISTINCT 产品代号) AS 变化次数
FROM TABLE GROUP BY 客户编号 便可以解决。
@如果会重复,oracle的写法是:
select cino,sum(decode(pro_id,flag,0,1) )ch_cnt
( select cino,pro_id,
lead(pro_id,1,pro_id)over(partition by pro_id order by 必须有排序字段)flag
from table
)group by cino
追问
wylxl99 你的语句是不是有问题,运行了报错ORA-00923:FROM keyword not found where expected
我的语句是这样的:
select no,sum(decode(thd,flag,0,1))ch_cnt
(select no,thd,
lead(thd,1,thd)over(partition by thd order by rq)flag
from bak2) group by no

no是客户编号,thd是产品代号,rq是日期顺序
追答
兄弟啊,我这是思路。呵呵。
报的是语法错误,咳咳,你有没有发现ch_cnt后没有from关键字啊
自己多检查下。
里面一个bug,不知道你发现没有。修改下lead(thd,1)over(partition by thd order by rq)flag
flyingFish211
2011-12-06 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
DB2/ORACLE 测试通过

SELECT 客户编号, SUM(CASE WHEN (SELECT COUNT(1) FROM (SELECT 客户编号, 产品代号, ROW_NUMBER() OVER(PARTITION BY 客户编号) RK FROM tab) b WHERE b.客户编号 =a.客户编号 and b.RK = (a.RK + 1) and 产品代号 <> a.产品代号) > 0 THEN 1
ELSE 0 END) + 1
FROM (SELECT 客户编号, 产品代号, ROW_NUMBER() OVER(PARTITION BY 客户编号) RK FROM tab) a
GROUP BY 客户编号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liangzihua1986
2011-11-25
知道答主
回答量:43
采纳率:100%
帮助的人:17.9万
展开全部
我认为应该先排序,读取第一个字段,然后判断第二个字段是否有变化,有变化就计数,否则不变
追问
逻辑上是这样,但该如何通过语句实现
追答
这个涉及逻辑判断,要不写在存储过程里比较好些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
康熙转世
2011-11-25 · TA获得超过6839个赞
知道大有可为答主
回答量:4325
采纳率:85%
帮助的人:2873万
展开全部
客户编号 aa 产品代号bb
select aa,count(*) from(select distinct aa bb from table)group by aa
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dl_会飞的青蛙
2011-11-25 · TA获得超过2456个赞
知道大有可为答主
回答量:3294
采纳率:0%
帮助的人:3346万
展开全部
什么数据库?
SELECT 客户编号,COUNT(DISTINCT 产品代号) AS 变化次数
FROM TABLE GROUP BY 客户编号
追问
你这个语句统计的是出现了多少个产品代号,而不是变化次数
我这个表里,同一个产品代号可能会在隔几条记录后又再次出现,即只要按顺序,产品代号发生变化了,都算一次变化
追答
那就只能写plsql了!~  查个结果集一点一点判断吧!~
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式