ms sql查询

jdazui 2011-06-14 09:18:10
我现在需要做一个广告位管理。
addressinfo 地址表
Id Name SuperiorId
1 全国 0
2 安徽 1
3 福建 1
4 甘肃 1
......
firmTypeInfo 类型表
id name
1 类型一
2 类型二
3 类型三
......
firmInfo 公司信息表
Id name url
1 联想 www....
1 三星 www....
1 诺基亚 www....

advertiseInfo 广告位表
id addressId firmTypeId firmId
1 2 1 1
...........

目前设置为:每一个公司类型对应的每一个地址允许5个广告位,问:怎样写sql语句查询每个_类型-地址_下还剩余几个广告位?


...全文
53 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdazui 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qianjin036a 的回复:]
SQL code
create table addressinfo(Id int,Name nvarchar(10),SuperiorId int)
insert into addressinfo select 1,'全国',0
insert into addressinfo select 2,'安徽',1
insert into addressinfo select 3,'福建',1
……
[/Quote] OK 谢了
-晴天 2011-06-15
  • 打赏
  • 举报
回复
create table addressinfo(Id int,Name nvarchar(10),SuperiorId int)
insert into addressinfo select 1,'全国',0
insert into addressinfo select 2,'安徽',1
insert into addressinfo select 3,'福建',1
insert into addressinfo select 4,'甘肃',1
create table firmTypeInfo(id int,name nvarchar(10))
insert into firmTypeInfo select 1,'类型一'
insert into firmTypeInfo select 2,'类型二'
insert into firmTypeInfo select 3,'类型三'
create table firmInfo(Id int,name nvarchar(10),url varchar(20))
insert into firmInfo select 1,'联想','www....'
insert into firmInfo select 1,'三星','www....'
insert into firmInfo select 1,'诺基亚','www....'
create table advertiseInfo(id int,addressId int,firmTypeId int,firmId int)
insert into advertiseinfo select 1,2,1,1
go
select c.地址,c.类型,5-sum(isnull(d.id,0))剩余 from(
select a.id,b.id id1,a.name as 地址,b.name as 类型
from addressinfo a,firmTypeInfo b
)c left join advertiseInfo d on c.id=d.addressId and c.id1=d.firmTypeId
group by c.地址,c.类型
/*
地址 类型 剩余
---------- ---------- -----------
安徽 类型二 5
福建 类型二 5
甘肃 类型二 5
全国 类型二 5
安徽 类型三 5
福建 类型三 5
甘肃 类型三 5
全国 类型三 5
安徽 类型一 4
福建 类型一 5
甘肃 类型一 5
全国 类型一 5

(12 行受影响)

*/
go
drop table addressinfo,firmTypeInfo,firmInfo,advertiseInfo
jdazui 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maco_wang 的回复:]
select
a.name as 地址,
b.name as 类型,
5-count(*) as 剩余广告位
from addressinfo a inner join advertiseinfo b
on a.id=b.addressid
inner join firmtypeinfo c on c.id=b.firmtypeid
group by a.name,b.name
……
[/Quote]

消息 207,级别 16,状态 1,第 8 行
列名 'name' 无效。
消息 207,级别 16,状态 1,第 3 行
列名 'name' 无效。
jdazui 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qianjin036a 的回复:]
SQL code
select a.name as 地址,b.name as 类型,5-count(*) as 剩余广告位
from addressinfo a inner join advertiseinfo on a.id=b.addressid
inner join firmtypeinfo c on c.id=b.firmtypeid
group by a.name,b.name
……
[/Quote]
select a.name as 地址,b.name as 类型,5-count(*) as 剩余广告位
from addressinfo a inner join advertiseinfo on a.id=b.addressid
inner join firmtypeinfo c on c.id=b.firmtypeid
group by a.name,b.name
jdazui 2011-06-15
  • 打赏
  • 举报
回复
无法绑定由多个部分组成的标识符 "b.name"。
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "b.name"。
--小F-- 2011-06-14
  • 打赏
  • 举报
回复
select  
a.name as 地址,
b.name as 类型,
5-count(*) as 剩余广告位
from
addressinfo a ,advertiseinfo b ,firmtypeinfo c
where
a.id=b.addressid
and
c.id=b.firmtypeid
group by
a.name,b.name
AcHerat 2011-06-14
  • 打赏
  • 举报
回复
支持楼上两位,貌似两位还没吃饭!


select
a.name as 地址,
b.name as 类型,
5-count(*) as 剩余广告位
from addressinfo a inner join advertiseinfo b
on a.id=b.addressid
inner join firmtypeinfo c on c.id=b.firmtypeid
group by a.name,b.name

叶子 2011-06-14
  • 打赏
  • 举报
回复
select
a.name as 地址,
b.name as 类型,
5-count(*) as 剩余广告位
from addressinfo a inner join advertiseinfo b
on a.id=b.addressid
inner join firmtypeinfo c on c.id=b.firmtypeid
group by a.name,b.name
--------------------
支持楼上,貌似晴天少写了个别名。
-晴天 2011-06-14
  • 打赏
  • 举报
回复
select a.name as 地址,b.name as 类型,5-count(*) as 剩余广告位
from addressinfo a inner join advertiseinfo on a.id=b.addressid
inner join firmtypeinfo c on c.id=b.firmtypeid
group by a.name,b.name

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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