又发现新问题了表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"的换算关系,亦为 "箱"到 "片"的换算关系 )

解决方案 »

  1.   

    最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
    如果有多表,表之间如何关联?
    发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  2.   

    好的!,但是表结构太复杂了,近百个字段,下面表述不知道高手们能不能看懂?

    [color=#0000FF]就是自动换算复杂计量单位的问题
    【产品表】:
    产品ID,产品名称,计量单位1(片),计量单位2(盒),计量单位3(中盒),计量单位4(箱)【计量单位换算关系表】:
    eg:
    薄荷片ID, 盒,    片, 20    (意思就是:1盒=10片)
    薄荷片ID, 中盒,  盒,  5
    薄荷片ID, 箱,  中盒, 20【欲得到的表】薄荷片ID,  箱,   片   2000  (意思就是:1箱=10片)求SQL语句,谢谢各位SQL大人!
    [/color]
      

  3.   

    sorry!
    就是自动换算复杂计量单位的问题【产品表】:
    产品ID,产品名称,计量单位1(片),计量单位2(盒),计量单位3(中盒),计量单位4(箱)【计量单位换算关系表】:
    eg:
    薄荷片ID, 盒, 片, 20 (意思就是:1盒=10片)
    薄荷片ID, 中盒, 盒, 5
    薄荷片ID, 箱, 中盒, 20【欲得到的表】薄荷片ID, 箱, 片 2000 (意思就是:1箱=2000片)求SQL语句,谢谢各位SQL大人!
      

  4.   

    弄个换算的中间表应该可以实现例如 建个表   单位   数量
                  盒      20               这样表示一盒换20片然后 
    select 产品id,产品名称,单位 ,((select 数量 from 中间表 where 单位 = 药品.单位) * 药品.数量) as 数量 from 药品
      

  5.   


    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
    */
      

  6.   

    "maco_wang"牛人辛苦了,非常感谢!  还有两个问题,能否给些指点:上面提到的【计量单位换算关系表】:
    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
    ----------------------------------------------------这样的话怎样解决?
      

  7.   


    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
    */
      

  8.   

    谢谢,虽然我认为可能是自己没有解释清楚,但你的解答还是对我很有帮助,至少意识到了T-sql确实很高深!!
    其实我需要的是通用性较强的解决方案,你的解答确实解决的具体问题,但是我需要的是把这些问题放在一起通盘考虑的解决方案。
    谢了,收获不少,献分!!