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
地域:
-------------------------
id | 地域|
-------------------------
1 | 東|
-------------------------
2 | 中西部|
-------------------------
3 | 西|
-------------------------


プロジェクトタイプ:
-------------------------
id | projectType |
-------------------------
1 | Webデザイン|
-------------------------
2 | データベース|
-------------------------
3 | 開発|
-------------------------


プロジェクト:
-------------------------------------------------- -----------------------
id | projectName | regionID | projectTypeID | 投稿日|
-------------------------------------------------- -----------------------
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 |
-------------------------------------------------- -----------------------



望ましい結果:
-----------------------------------------
地域| プロジェクトタイプ| totalCount |
-----------------------------------------
東| Webデザイン| 1 |
-----------------------------------------
東| データベース| 3 |
-----------------------------------------
東| 開発| 0 |
-----------------------------------------
中西部| Webデザイン| 0 |
-----------------------------------------
中西部| データベース| 2 |
-----------------------------------------
中西部| 開発| 1 |
-----------------------------------------
西| Webデザイン| 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 に答える