我想问个问题,现在有这样一个数据库
drop table kmb;
create table kmb (
  kmbh                  VARCHAR(16) NOT NULL,
  km                    VARCHAR(64),
  PRIMARY KEY (kmbh)
)default charset=gb2312;insert into kmb values( '2', '材料成本差异');
insert into kmb values( '201', '主要材料');
insert into kmb values( '201001', '钢材');
insert into kmb values( '201002', '木材');
insert into kmb values( '201003', '水泥');
insert into kmb values( '201006', '火工品');
insert into kmb values( '201007', '砂石料');
insert into kmb values( '201008', '商用混凝土');
insert into kmb values( '203', '材料运杂费');
insert into kmb values( '299', '其他类差异');
insert into kmb values( '3', '财务往来');
insert into kmb values( '301', '现金');
insert into kmb values( '302', '转帐支票');
insert into kmb values( '303', '现金支票');
insert into kmb values( '304', '汇');
insert into kmb values( '4', '其他费用');
insert into kmb values( '401', '机械使用费');
insert into kmb values( '402', '租赁费');
insert into kmb values( '403', '其它应付款');现在如果 select kmbh, km, 1 as expend from kmb 出来的结果是截图这个样子的
我想要的是如果像2 201 这种数据中还有其他 有它自己开头的 (201001) 这样的 expend =1
如果想 203 这种,数据中没有了 203×××之类的 expend 就要0
结果如图
我写了个错的。。
if exist (select kmbh from kmb where kmbh like kmbh'%')
select kmbh, km, 0 as expend from kmb
else
select kmbh, km, 1 as expend from kmb
应该怎么做呢??。。谢谢

解决方案 »

  1.   

    /*
    思路:逆序查询,
    借用一个变量保存本条kmbh
    判断下一条的kmbh是否是本条kmbh的开头,如果是,则下一条expend为1,否则为0
    一直到最后一条记录
    然后正序再查询出来sql语句如下:
    */
    set @kmbh='';
    select kmbh, km,expend from 
        (
           select kmbh, km, if(locate(kmbh, @kmbh)=1,1,0)as expend,@kmbh:=kmbh  from kmb order by kmbh desc
        ) as t 
    order by  kmbh;/*
    结果"2" "材料成本差异" "1"
    "201" "主要材料" "1"
    "201001" "钢材" "0"
    "201002" "木材" "0"
    "201003" "水泥" "0"
    "201006" "火工品" "0"
    "201007" "砂石料" "0"
    "201008" "商用混凝土" "0"
    "203" "材料运杂费" "0"
    "299" "其他类差异" "0"
    "3" "财务往来" "1"
    "301" "现金" "0"
    "302" "转帐支票" "0"
    "303" "现金支票" "0"
    "304" "汇" "0"
    "4" "其他费用" "1"
    "401" "机械使用费" "0"
    "402" "租赁费" "0"
    "403" "其它应付款" "0"
    */