SELECT a.PositionId, a.PositionName, COUNT(b.RecruitId) AS jNum
FROM dbo.PositionTbl AS a INNER JOIN
dbo.RecruitTbl AS b ON b.Position_s = a.PositionName
WHERE (b.Position_b = 'A分类') AND (a.PositionKey = 1)
GROUP BY a.PositionId, a.PositionName显示结果为:
PositionId PositionName jNum
1 A1分类 23我想要的结果是
PositionId PositionName jNum
1 A1分类 23
2 A2分类 0
3 A3分类 0
4 A4分类 0
5 A5分类 0怎么才能把0的也显示出来。。顺便帮忙优化一下SQL语句。。本人不太熟悉SQL。。
FROM dbo.PositionTbl AS a INNER JOIN
dbo.RecruitTbl AS b ON b.Position_s = a.PositionName
WHERE (b.Position_b = 'A分类') AND (a.PositionKey = 1)
GROUP BY a.PositionId, a.PositionName显示结果为:
PositionId PositionName jNum
1 A1分类 23我想要的结果是
PositionId PositionName jNum
1 A1分类 23
2 A2分类 0
3 A3分类 0
4 A4分类 0
5 A5分类 0怎么才能把0的也显示出来。。顺便帮忙优化一下SQL语句。。本人不太熟悉SQL。。
a.PositionName ,
ISNULL(COUNT(b.RecruitId),0) AS jNum
FROM dbo.PositionTbl AS a
LEFT JOIN dbo.RecruitTbl AS b
ON b.Position_s = a.PositionName
WHERE ( b.Position_b = 'A分类' )
AND ( a.PositionKey = 1 )
GROUP BY a.PositionId ,
a.PositionName
2、b.Position_s = a.PositionName
WHERE (b.Position_b = 'A分类') AND (a.PositionKey = 1)这里用到的字段加上非聚集索引试试
PositionTbl表
有点类似于招聘的分类。。一级类别下面要列出二级类别。。要算出二级类别有多少条信息
FROM dbo.PositionTbl a
LEFT JOIN dbo.RecruitTbl b ON b.PositionId = a.PositionId -->应该用PositionId 关联
WHERE ( b.Position_b = 'A分类' ) AND ( a.PositionKey = 1 )
GROUP BY a.PositionId ,a.PositionName
14 建筑工程 1 1
15 市政公用 1 2
16 机电工程 1 3
17 公路工程 1 4
18 水利水电 1 5
19 矿业工程 1 6
20 港口与航道 1 7
21 通信与广电 1 8
22 铁路工程 1 9
23 民航机场 1 10RecruitId Position_b Position_s JobName
1 一级建造师 机电工程 北京企业寻建造师挂靠
2 一级建造师 机电工程 高薪诚聘一级房建建造师 绝对安全 和市政 机电专业
3 一级建造师 机电工程 成都企业 诚聘二级房建 初始证书 若干
4 一级建造师 机电工程 高薪诚聘一级房建建造师 绝对安全 和市政 机电专业
5 一级建造师 机电工程 高薪诚聘一级房建建造师 绝对安全 和市政 机电专业这样行不~~
我也想用PositionId关联。。主要是关联人家设置了Position_b和Position_s。。我修改不到。。
go
create table #tempA( [PositionId] varchar(100), [PositionName] varchar(100), [PositionKey] varchar(100), [Px] varchar(100));
insert #tempA
select '14','建筑工程','1','1' union all
select '15','市政公用','1','2' union all
select '16','机电工程','1','3' union all
select '17','公路工程','1','4' union all
select '18','水利水电','1','5' union all
select '19','矿业工程','1','6' union all
select '20','港口与航道','1','7' union all
select '21','通信与广电','1','8' union all
select '22','铁路工程','1','9' union all
select '23','民航机场','1','10' if OBJECT_ID('tempdb..#tempB', 'u') is not null drop table #tempB;
go
create table #tempB( [RecruitId] int, [Position_b] varchar(100), [Position_s] varchar(100), [JobName] varchar(100));
insert #tempB
select '1','一级建造师','机电工程','北京企业寻建造师挂靠' union all
select '2','一级建造师','机电工程','高薪诚聘一级房建建造师 绝对安全 和市政 机电专业' union all
select '3','一级建造师','机电工程','成都企业 诚聘二级房建 初始证书 若干' union all
select '4','一级建造师','机电工程','高薪诚聘一级房建建造师 绝对安全 和市政 机电专业' union all
select '5','一级建造师','机电工程','高薪诚聘一级房建建造师 绝对安全 和市政 机电专业' --SQL:
SELECT a.PositionId ,
a.PositionName ,
COUNT(b.RecruitId) AS jNum
FROM #tempA AS a
LEFT JOIN #tempB AS b
ON b.Position_s = a.PositionName
AND b.Position_b = '一级建造师'
WHERE a.PositionKey = 1
GROUP BY a.PositionId ,
a.PositionName
/*
PositionId PositionName jNum
20 港口与航道 0
17 公路工程 0
16 机电工程 5
14 建筑工程 0
19 矿业工程 0
23 民航机场 0
15 市政公用 0
18 水利水电 0
22 铁路工程 0
21 通信与广电 0
*/
a.PositionName ,
COUNT(b.RecruitId) AS jNum
FROM #tempA AS a
LEFT JOIN #tempB AS b
ON b.Position_s = a.PositionName
AND b.Position_b = '一级建造师'
WHERE a.PositionKey = 1
GROUP BY a.PositionId ,
a.PositionName
ORDER BY COUNT(b.RecruitId) DESC --是这意思?
a.PositionName ,
COUNT(b.RecruitId) AS jNum
FROM #tempA AS a
LEFT JOIN #tempB AS b
ON b.Position_s = a.PositionName
AND b.Position_b = '一级建造师'
WHERE a.PositionKey = 1
GROUP BY a.PositionId ,
a.PositionName
ORDER BY COUNT(b.RecruitId) DESC --是这意思?#tempA这里应该还有一列叫px的。。用来排序用的。。顺带问一下。。group by之后可以用order by ?
SELECT a.PositionId ,
a.PositionName ,
COUNT(b.RecruitId) AS jNum
FROM #tempA AS a
LEFT JOIN #tempB AS b
ON b.Position_s = a.PositionName
AND b.Position_b = '一级建造师'
WHERE a.PositionKey = 1
GROUP BY a.PositionId ,
a.PositionName
ORDER BY MIN(a.px) --试试,哎,兄弟,你不给数据,让大家猜呀 ^_^
我的例子中是varchar类型,可能会有点儿问题。如果是INT类型,就没问题了
SELECT a.PositionId ,
a.PositionName ,
COUNT(b.RecruitId) AS jNum
FROM #tempA AS a
LEFT JOIN #tempB AS b
ON b.Position_s = a.PositionName
AND b.Position_b = '一级建造师'
WHERE a.PositionKey = 1
GROUP BY a.PositionId ,
a.PositionName
ORDER BY MIN(a.px) --试试,哎,兄弟,你不给数据,让大家猜呀 ^_^冤枉啊。。我给了。。在上面有的~~~~