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
字段
编号 名字
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
后面两张表是等值链接
即电厂对应项目so2 co2
水厂对应项目 ph cod
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
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
*/
辽宁省 阜新市 电厂 co2 0
辽宁省 丹东市 电厂 co2 0
吉林省 大连市 电厂 co2 0
吉林省 鞍山市 电厂 co2 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
辽宁省 阜新市 电厂 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 是笛卡积。
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 这些 .他们 在数据库的字段是没有什么关系
省份和城市的关联是ok的。
思路应该是前面两个表join,后面两个表join,
最后再做Cross join.
(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)
省份名称 城市名称 类型 项目 值
province_n city_n ItemClassName ItemName Lcx_Value
这个表的 Lcx_Value 对应的城市 有值的话 就不是0 就是该值 ,否则就是 0.该怎么写