求一个sql,主要是比较字符串,类似1-10和1-1-1的大小关系

wsq2002 2013-05-04 10:03:26
共2个表,可能做建筑工程项目的一看就知道咋回事。
表A的字段有:子项编码 varchar(50), 数量 decimal,
表内数据大概是这样:
1-1-1 12
1-1-3 15
1-2-3 20
1-10-2 16
2-1-3 10
2-2-10 20
...

表B的字段有:
章节名称 varchar(50), 子项起始编码 varchar(50), 子项截止编码 varchar(50)
表内数据大概是这样:
土方工程 1-1-1 1-1-3
土方工程 1-1-5 1-2-10
石方工程 2-1-1 2-3-10

求累计出各章节的数量,比如:
土方工程 47,计算过程是12+15+20
石方工程 30,计算过程是10+20

我的在分析器里这么写着试验了一下:
SELECT * FROM A WHERE 子项编码 between '1-1-1' AND '1-10-10'
查询不出来,显然这个'1-1-1' AND '1-10-10'比较不出来。

上面说的不知道各位能明白不,有清楚的给我指点一下这个sql语句怎么写?
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsq2002 2013-05-04
  • 打赏
  • 举报
回复
对,你说的是,我打算这样,一个主表存储章节基础信息,一个子表存储每个章节所有的对应子项。 B表-主表是:ID、章节名称、单位; B表-子表是:主表ID、子项编码,有多少个子项编码,就有多少行,可能和你说的是一个意思。 多谢啦
专注or全面 2013-05-04
  • 打赏
  • 举报
回复
那你整成主子表 一个“土方工程”表的ID对应多个基础数据表,这样统计起来就方便多了
专注or全面 2013-05-04
  • 打赏
  • 举报
回复

select B.projectName,SUM(A.Value+C.Value) as total
from 
codeValue A 
inner join consume B on A.code = B.fromCode
inner join codeValue C on B.toCode=C.code
group by B.projectName

projectName                                        total
-------------------------------------------------- ---------------------------------------
石头方工程                                              32.00
土方工程                                               27.00

(2 行受影响)
wsq2002 2013-05-04
  • 打赏
  • 举报
回复
还有比较特殊的章节,比如用户自己定的编号,起始编号:TS001,截至编号TS003。 我感觉用起始和截至这种表结构不合适,还是有一个子项一行那种吧。
wsq2002 2013-05-04
  • 打赏
  • 举报
回复
多谢哥们帮忙,但是这样应该是不对的。
专注or全面 2013-05-04
  • 打赏
  • 举报
回复
create table codeValue
(
	code varchar(10),
	Value decimal(10,2)
)

create table consume
(
	projectName varchar(50),
	fromCode varchar(10),
	toCode varchar(10)
)

insert into codeValue values ('1-1-1', '12')
insert into codeValue values ('1-1-3', '15')
insert into codeValue values ('1-2-3', '20')

insert into consume values ('土方工程', '1-1-1','1-1-3')

insert into consume values ('石头方工程', '1-1-1','1-2-3')


select t.projectName,SUM(t.Value) as 数量 from
(
	select B.projectName,A.code,A.Value from codeValue A inner join consume B on A.code = B.fromCode
	union
	select B.projectName,A.code,A.Value from codeValue A inner join consume B on A.code = B.toCode
)t group by t.projectName

projectName                                        数量
-------------------------------------------------- ---------------------------------------
石头方工程                                              32.00
土方工程                                               27.00

(2 行受影响)


专注or全面 2013-05-04
  • 打赏
  • 举报
回复
两个表join一下,用数字替换对应的编码

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧