又发现新问题了表1:产品表 (字段:产品ID,产品名称,主计量单位ID,辅计量单位1-ID,辅计量单位2-ID,...)
(
eg: 产品ID,产品名称,主计量单位ID,辅计量单位1-ID,辅计量单位2-ID
01 薄荷片 01(片) 03(箱) 02(盒)、
)表2:计量单位目录表 (字段:计量单位ID,计量单位名称)
(
eg: 计量单位ID,计量单位名称
01 片
02 盒
03 箱
)
表3:计量单位换算关系表 (字段:产品ID,计量单位1-ID,计量单位2-ID,换算系数)
(
eg: 产品ID,计量单位ID_1,计量单位ID_2, 换算系数
薄荷片ID (盒) (片) 20
薄荷片ID (箱) (盒) 500
)欲得到下列表,求救:产品ID 产品名称 每箱数量(即"计量单位2-ID"到"主计量单位ID"的换算关系,亦为 "箱"到 "片"的换算关系 )
(
eg: 产品ID,产品名称,主计量单位ID,辅计量单位1-ID,辅计量单位2-ID
01 薄荷片 01(片) 03(箱) 02(盒)、
)表2:计量单位目录表 (字段:计量单位ID,计量单位名称)
(
eg: 计量单位ID,计量单位名称
01 片
02 盒
03 箱
)
表3:计量单位换算关系表 (字段:产品ID,计量单位1-ID,计量单位2-ID,换算系数)
(
eg: 产品ID,计量单位ID_1,计量单位ID_2, 换算系数
薄荷片ID (盒) (片) 20
薄荷片ID (箱) (盒) 500
)欲得到下列表,求救:产品ID 产品名称 每箱数量(即"计量单位2-ID"到"主计量单位ID"的换算关系,亦为 "箱"到 "片"的换算关系 )
如果有多表,表之间如何关联?
发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
[color=#0000FF]就是自动换算复杂计量单位的问题【产品表】:
产品ID,产品名称,计量单位1(片),计量单位2(盒),计量单位3(中盒),计量单位4(箱)【计量单位换算关系表】:
eg:
薄荷片ID, 盒, 片, 20 (意思就是:1盒=10片)
薄荷片ID, 中盒, 盒, 5
薄荷片ID, 箱, 中盒, 20【欲得到的表】薄荷片ID, 箱, 片 2000 (意思就是:1箱=10片)求SQL语句,谢谢各位SQL大人!
[/color]
就是自动换算复杂计量单位的问题【产品表】:
产品ID,产品名称,计量单位1(片),计量单位2(盒),计量单位3(中盒),计量单位4(箱)【计量单位换算关系表】:
eg:
薄荷片ID, 盒, 片, 20 (意思就是:1盒=10片)
薄荷片ID, 中盒, 盒, 5
薄荷片ID, 箱, 中盒, 20【欲得到的表】薄荷片ID, 箱, 片 2000 (意思就是:1箱=2000片)求SQL语句,谢谢各位SQL大人!
盒 20 这样表示一盒换20片然后
select 产品id,产品名称,单位 ,((select 数量 from 中间表 where 单位 = 药品.单位) * 药品.数量) as 数量 from 药品
declare @T1 table (id varchar(8),punit varchar(4),unit varchar(4),num int)
insert into @T1
select '薄荷片ID','盒','片',20 union all
select '薄荷片ID','中盒','盒',5 union all
select '薄荷片ID','箱','中盒',20select id,punit,
(select ''+(select unit from @T1 c
where punit=b.unit)
from @T1 b WHERE punit=a.unit) as unit,
(select num*a.num*(select num
from @T1 c where punit=b.unit)
from @T1 b WHERE punit=a.unit) as num
from @T1 a where punit='箱'/*
id punit unit num
-------- ----- ----- -----------
薄荷片ID 箱 片 2000
*/
eg:
薄荷片ID, 盒, 片, 20 (意思就是:1盒=10片)
薄荷片ID, 中盒, 盒, 5
薄荷片ID, 箱, 中盒, 20因为实际数据库环境稍显复杂,可能会还会有下面两种状况需要考虑:
----------------------------------------------------
1.单位换算可能并不是第一个计量单位大于第二个计量单位
eg:
薄荷片ID, 盒, 片, 20 (意思就是:1盒=10片)
薄荷片ID, 盒, 中盒, 0.2
薄荷片ID, 箱, 中盒, 20
----------------------------------------------------
2.还可能有计量单位"跳跃"的情况
eg:
薄荷片ID, 盒, 片, 20 (意思就是:1盒=10片)
薄荷片ID, 中盒, 盒, 5薄荷片ID, 箱, 盒, 100
----------------------------------------------------这样的话怎样解决?
declare @T1 table (id varchar(8),punit varchar(4),unit varchar(4),num int)
insert into @T1
select '薄荷片ID','盒','片',20 union all
select '薄荷片ID','箱','盒',1000SELECT id,punit,(SELECT unit
FROM @T1 WHERE punit=a.unit ) AS unit,num*
(SELECT num
FROM @T1 WHERE punit=a.unit) AS num
FROM @T1 a where punit='箱'
/*
id punit unit num
-------- ----- ---- -----------
薄荷片ID 箱 片 20000
*/
其实我需要的是通用性较强的解决方案,你的解答确实解决的具体问题,但是我需要的是把这些问题放在一起通盘考虑的解决方案。
谢了,收获不少,献分!!