有如下的两个表
表一
类别ID 类别名
1 类别一
2 类别二
3 类别三
4 类别四
5 类别五表二
ID 类别ID 公司名
1 1 公司A
2 1 公司B
3 2 公司C
4 1 公司D
5 2 公司E
6 1 公司F
7 3 公司G
8 3 公司H
9 3 公司I
10 4 公司J
11 1 公司K
现在要求实现如下的结果:类别ID 类别名 公司数量
1 类别一 5
3 类别三 3
2 类别二 2
4 类别四 1
5 类别五 0我用了如下的语句:
SELECT 表一.类别名, 表一.类别ID, COUNT(表二.类别ID) AS aa
FROM 表二 INNER JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表二.类别ID, 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC可以实现按数量倒排序,但问题是如果某个类别在表二中还没有相应的数据,那这个类别就查不到,现在的结果如下:类别ID 类别名 公司数量
1 类别一 5
3 类别三 3
2 类别二 2
4 类别四 1类别五就查不到数据,请教如何改变语句达到真正的效果
表一
类别ID 类别名
1 类别一
2 类别二
3 类别三
4 类别四
5 类别五表二
ID 类别ID 公司名
1 1 公司A
2 1 公司B
3 2 公司C
4 1 公司D
5 2 公司E
6 1 公司F
7 3 公司G
8 3 公司H
9 3 公司I
10 4 公司J
11 1 公司K
现在要求实现如下的结果:类别ID 类别名 公司数量
1 类别一 5
3 类别三 3
2 类别二 2
4 类别四 1
5 类别五 0我用了如下的语句:
SELECT 表一.类别名, 表一.类别ID, COUNT(表二.类别ID) AS aa
FROM 表二 INNER JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表二.类别ID, 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC可以实现按数量倒排序,但问题是如果某个类别在表二中还没有相应的数据,那这个类别就查不到,现在的结果如下:类别ID 类别名 公司数量
1 类别一 5
3 类别三 3
2 类别二 2
4 类别四 1类别五就查不到数据,请教如何改变语句达到真正的效果
FROM 表二 LEFT JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表二.类别ID, 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC
FROM 表二 RIGHT JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表二.类别ID, 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC
SELECT 表一.类别名, 表一.类别ID, ISNULL(COUNT(表二.类别ID),0) AS aa
FROM 表二 LEFT JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表二.类别ID, 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC
-- Author: liangCK 小梁 & angellan 兰儿
-- Commen: 小梁 爱 兰儿
-- Date : 2009-05-29 09:53:55
-------------------------------------------
--> 生成测试数据: @tb1
DECLARE @tb1 TABLE (类别ID INT,类别名 VARCHAR(6))
INSERT INTO @tb1
SELECT 1,'类别一' UNION ALL
SELECT 2,'类别二' UNION ALL
SELECT 3,'类别三' UNION ALL
SELECT 4,'类别四' UNION ALL
SELECT 5,'类别五'
--> 生成测试数据: @tb2
DECLARE @tb2 TABLE (ID INT,类别ID INT,公司名 VARCHAR(5))
INSERT INTO @tb2
SELECT 1,1,'公司A' UNION ALL
SELECT 2,1,'公司B' UNION ALL
SELECT 3,2,'公司C' UNION ALL
SELECT 4,1,'公司D' UNION ALL
SELECT 5,2,'公司E' UNION ALL
SELECT 6,1,'公司F' UNION ALL
SELECT 7,3,'公司G' UNION ALL
SELECT 8,3,'公司H' UNION ALL
SELECT 9,3,'公司I' UNION ALL
SELECT 10,4,'公司J' UNION ALL
SELECT 11,1,'公司K'--SQL查询如下:SELECT A.类别名, A.类别ID, ISNULL(COUNT(B.类别ID),0) AS aa
FROM @tb1 AS A
LEFT JOIN @tb2 AS B
ON A.类别ID = B.类别ID
GROUP BY A.类别ID, A.类别名
ORDER BY COUNT(B.类别ID) DESC /*
类别名 类别ID aa
------ ----------- -----------
类别一 1 5
类别三 3 3
类别二 2 2
类别四 4 1
类别五 5 0
(5 row(s) affected)
*/
SELECT 表一.类别名, 表一.类别ID, COUNT(表二.类别ID) AS aa
FROM 表二 RIGHT JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC
再次谢谢大家
我用了如下的语句:
SELECT 表一.类别名, 表一.类别ID, isnull(COUNT(表二.类别ID),0) AS aa
FROM 表二 INNER JOIN 表一 ON 表二.类别ID = 表一.类别ID
GROUP BY 表二.类别ID, 表一.类别名, 表一.类别ID
ORDER BY COUNT(表二.类别ID) DESC