Province_B 表
字段
编号       名字
province_c  province_n
1        辽宁City_B表
字段
编号      名字
province_c   city_n
1        沈阳
2        大连 WQ_ItemClass_B 表
字段   
编号        名称ItemClassID    ItemClassname
1          电厂
2          水厂WQ_Item_B表编号        名称
ItemClassID    ItemName
1          so2
1          co2
2          ph
2          codjcb (开始这个表各个字段值是空的)
  省份名称   城市名称   类型     项目      值 
province_n   city_n  ItemClassName ItemName  Lcx_Value
   
根据上面的5个表得到 下面的查询 这个查询怎么写,
 省份名称   城市名称   类型     项目      值 
province_n   city_n  ItemClassName ItemName  Lcx_Value
  辽宁     沈阳     电厂     so2      0
  辽宁     沈阳     电厂     co2      0
  辽宁     大连     电厂     so2      0
  辽宁     大连     电厂     co2      0
  辽宁     沈阳     水厂     ph       0
  辽宁     沈阳     水厂     cod      0
  辽宁     大连     水厂     ph       0
  辽宁     大连     水厂     cod      0

解决方案 »

  1.   

    insert into jcb select province_n 省份名称,city_n 城市名称,ItemClassname 类型,ItemName 项目,值 null from Province_B,City_B,WQ_ItemClass_B,WQ_Item_B where WQ_ItemClass_B.ItemClassID=WQ_Item_B.ItemClasSID;
      

  2.   

    是否正确还需楼主验证 前面三个表是求笛卡尔积
    后面两张表是等值链接
    即电厂对应项目so2 co2
    水厂对应项目 ph cod
      

  3.   

    楼上的哥们 ,谢谢你.我不是插入数据,是根据得到Province_B 表  City_B表 WQ_ItemClass_B 表  和  WQ_Item_B表 jcb   得到一个查询
      

  4.   

    select a.province_n,b.city_n,c.ItemClassName,d.ItemName,Lcx_Value=0
    from Province_B a
    cross join City_B b
    cross join WQ_ItemClass_B c 
    inner join WQ_Item_B d on c.ItemClassID=d.ItemClassID
      

  5.   

    --原始数据:@Province_B
    declare @Province_B table(province_c int,province_n varchar(4))
    insert @Province_B
    select 1,'辽宁'
    --原始数据:@City_B
    declare @City_B table(province_c int,city_n varchar(4))
    insert @City_B
    select 1,'沈阳' union all
    select 2,'大连'
    --原始数据:@WQ_ItemClass_B
    declare @WQ_ItemClass_B table(ItemClassID int,ItemClassname varchar(4))
    insert @WQ_ItemClass_B
    select 1,'电厂' union all
    select 2,'水厂'
    --原始数据:@WQ_Item_B
    declare @WQ_Item_B table(ItemClassID int,ItemName varchar(3))
    insert @WQ_Item_B
    select 1,'so2' union all
    select 1,'co2' union all
    select 2,'ph' union all
    select 2,'co'select a.province_n,b.city_n,c.ItemClassName,d.ItemName,Lcx_Value=0
    from @Province_B a
    cross join @City_B b
    cross join @WQ_ItemClass_B c 
    inner join @WQ_Item_B d on c.ItemClassID=d.ItemClassID/*
    province_n city_n ItemClassName ItemName Lcx_Value   
    ---------- ------ ------------- -------- ----------- 
    辽宁         沈阳     电厂            so2      0
    辽宁         大连     电厂            so2      0
    辽宁         沈阳     电厂            co2      0
    辽宁         大连     电厂            co2      0
    辽宁         沈阳     水厂            ph       0
    辽宁         大连     水厂            ph       0
    辽宁         沈阳     水厂            co       0
    辽宁         大连     水厂            co       0
    */
      

  6.   

    谢谢Limpire  了如果我的 jcb    表的 的Lcx_Value   字段的值 不是 0  的话 ,我想显示他本来的值 该怎么办呢 谢谢了
      

  7.   

    Limpire还有 你的结果 会出现这样的结果 
    辽宁省    阜新市 电厂   co2  0
    辽宁省    丹东市 电厂 co2  0
    吉林省 大连市 电厂 co2 0
    吉林省 鞍山市 电厂 co2 0
      

  8.   

    select a.province_n,b.city_n,c.ItemClassName,d.ItemName,Lcx_Value=isnull(e.Lcx_Value,0)
        from Province_B a
            cross join City_B b
            cross join WQ_ItemClass_B c 
            inner join WQ_Item_B d on c.ItemClassID=d.ItemClassID
    left join jcb e
    on e.province_n=a.province_n
    and e.city_n=b.city_n
    and e.ItemClassName=c.ItemClassName
    and e.ItemName=d.ItemName
      

  9.   

    还有 你的结果 会出现这样的结果 
    辽宁省    阜新市 电厂   co2  0
    辽宁省    丹东市 电厂 co2  0
    吉林省 大连市 电厂 co2 0
    吉林省 鞍山市 电厂 co2 0
    ------------------
    也就是Province_B表和City_B表缺少一个关系字段造成:Province_B a join City_B b on a.StateID=b.StateID --省IDcross join 是笛卡积。
      

  10.   

    同理WQ_ItemClass_B表和上面两表也缺少关系,没有任何联系,我只能通过cross join来实现了。我正想跟你说这个问题。
      

  11.   


    Province_B 表  City_B表  WQ_ItemClass_B 表  和  WQ_Item_B表 一个是城市表 一个是项目表 .在数据库上是没有什么关联 的 ,任何一个城市 拥有所有的项目.意思  ,假设 辽宁  沈阳   他拥有WQ_ItemClass_B 表  和  WQ_Item_B表  这两个表的所有内容 ,别的城市也是一样 我又新建了个这样的表jcb   jcb (开始这个表各个字段值是空的) 
      省份名称   城市名称   类型     项目      值  
    province_n   city_n  ItemClassName ItemName  Lcx_Value 
     这个也可以换成 响应的编号也可以 province_c   ItemClassID  这些 .他们  在数据库的字段是没有什么关系
      

  12.   

    至少Province_B和City_B表要有省和城市的对应关系,如果没有,电脑怎么识别沈阳属于辽宁省而不是吉林或其它省。
      

  13.   

    主要问题出现在城市/ItemClass间的联系断裂,
    省份和城市的关联是ok的。
    思路应该是前面两个表join,后面两个表join,
    最后再做Cross join.
      

  14.   

    你测试下面的sql厄行:select province_n,city_n,ItemClassName,ItemName,0 as Lcx_Value from 
    (select Province.province_n,City_B.city_n from Province,City_B where Province.province_c=City_B.province_c) 
    cross join 
    (select WQ_ItemClass_B.ItemClassName,WQ_Item_B.ItemName from WQ_ItemClass_B,WQ_Item_B where 
    WQ_ItemClass_B.ItemClassID=WQ_Item_B.ItemClassID)
      

  15.   

    Roy.cn   你的是正确的,我还有个条件就是jcb (开始这个表各个字段值是空的)  
      省份名称   城市名称   类型     项目      值   
    province_n   city_n  ItemClassName ItemName  Lcx_Value  
      这个表的  Lcx_Value   对应的城市 有值的话 就不是0 就是该值 ,否则就是 0.该怎么写
      

  16.   

    关注...我也想问这种.能够查询出来就显示值.查询不到就显示  0 or null
      

  17.   

    case when Lcx_Value is not null then Lcx_Value else 0 end