我想问个问题,现在有这样一个数据库
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
应该怎么做呢??。。谢谢
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
应该怎么做呢??。。谢谢
解决方案 »
- windows7 中如何使用myODBC
- 这个语句应该如何写!
- 请教一个mysql数据库性能问题!
- mysql 连接jdbc老连不上,有人怀疑classpath 设置不对
- mysql处理时间格式问题
- MYSQL 配置问题<急>!!!
- 求助:如何将.txt文件内容加入到mysql数据库中
- tomcat 3.2.4 在linux下怎样与postgresql 连接
- ERROR 1136 (21S01): Column count doesn't match value count at row 1
- 请教 mysql存储过程中 传递表名作参数怎么整啊?
- mysql_query()函数查询求助
- 请问这个SQL语句怎么优化?
思路:逆序查询,
借用一个变量保存本条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"
*/