0

我整个下午都在想办法解决这个问题。我什至不确定当前的数据库结构是否可行。我已经尝试了以下语句,但它没有返回我需要的内容。下面语句的问题是它只返回 projectType 如果它存在。如果 projectType 不存在,我需要返回零。任何帮助深表感谢。

SELECT r.region, ISNULL(o.totalcount,0) AS TotalCount, o.projectType
  FROM region r 
  LEFT JOIN (
    SELECT COUNT(o2.id) AS TotalCount, o2.regionID, t2.projectType
      FROM projects o2 
      RIGHT JOIN projectTypes t2 on o2.typeID = t2.id
      GROUP BY o2.regionId, t2.projectType
  ) o ON r.id = o.regionId
  ORDER by r.Region
地区:
-------------------------
编号 | 地区 |
-------------------------
1 | 东 |
-------------------------
2 | 中西部 |
-------------------------
3 | 西 |
-------------------------


项目类型:
-------------------------
编号 | 项目类型 |
-------------------------
1 | 网页设计 |
-------------------------
2 | 数据库 |
-------------------------
3 | 发展 |
-------------------------


项目:
-------------------------------------------------- ----------------------
编号 | 项目名称 | 地区ID | 项目类型ID | 发表于 |
-------------------------------------------------- ----------------------
1 | 项目 1 | 1 | 2 | 2012-09-02 |
-------------------------------------------------- ----------------------
2 | 项目 2 | 2 | 2 | 2012-09-02 |
-------------------------------------------------- ----------------------
3 | 项目 3 | 1 | 1 | 2012-09-02 |
-------------------------------------------------- ----------------------
4 | 项目 4 | 3 | 2 | 2012-09-02 |
-------------------------------------------------- ----------------------
5 | 项目 5 | 3 | 1 | 2012-10-02 |
-------------------------------------------------- ----------------------
6 | 项目 6 | 3 | 2 | 2012-10-02 |
-------------------------------------------------- ----------------------
7 | 项目 7 | 3 | 3 | 2012-10-02 |
-------------------------------------------------- ----------------------
8 | 项目 8 | 2 | 3 | 2012-10-02 |
-------------------------------------------------- ----------------------
9 | 项目 9 | 1 | 2 | 2012-10-02 |
-------------------------------------------------- ----------------------
10 | 项目 10 | 1 | 2 | 2012-10-02 |
-------------------------------------------------- ----------------------



期望的结果:
-----------------------------------------
地区 | 项目类型 | 总数 |
-----------------------------------------
东 | 网页设计 | 1 |
-----------------------------------------
东 | 数据库 | 3 |
-----------------------------------------
东 | 发展 | 0 |
-----------------------------------------
中西部 | 网页设计 | 0 |
-----------------------------------------
中西部 | 数据库 | 2 |
-----------------------------------------
中西部 | 发展 | 1 |
-----------------------------------------
西 | 网页设计 | 1 |
-----------------------------------------
西 | 数据库 | 2 |
-----------------------------------------
西 | 发展 | 1 |
-----------------------------------------
4

2 回答 2

4

http://sqlfiddle.com/#!3/6680f/1

SELECT r.region
  , pt.projectType 
  , count(p.id)
FROM region r cross join ProjectTypes pt

  left join projects p on p.regionID = r.id and pt.id = p.TypeID

group by r.region, pt.projectType
order by r.region
于 2012-10-05T22:22:14.970 回答
1

为什么不

SELECT regions.region, projectTypes.projectType,
       (SELECT count(*) FROM projects
        WHERE projects.typeID = projectTypes.id
          AND projects.regionID = regions.id) as totalCount
FROM regions, projectTypes
于 2012-10-05T22:21:21.020 回答