我需要一个包含CatId和Flag列的视图。如果存在CatID的任何子类别,则标记将为1

时间:2019-06-21 10:03:49

标签: sql sql-server select

有两个表:CategoryCatID | CatName

|   | CatID | CategoryName       |
|---|-------|--------------------|
| 1 | 1021  | Home               |
| 2 | 1022  | Corporate          |
| 3 | 1023  | Products           |
| 4 | 1024  | Gardens            |
| 5 | 1025  | Investor Relations |
| 6 | 1026  | News & Events      |
| 7 | 1027  | Contact Us         |

SubCategorySubID | CatID

|    | SubID | CatID |
|----|-------|-------|
|  1 |    9  |  1025 |
|  2 |    5  |  1022 |
|  3 |    6  |  1022 |
|  4 |   10  |  1025 |
|  5 |   11  |  1025 |
|  6 |   12  |  1025 |
|  7 |   13  |  1025 |
|  8 |   14  |  1025 |
|  9 |   15  |  1025 |
| 10 |   16  |  1026 |
| 11 |   17  |  1026 |
| 12 |    7  |  1022 |
| 13 |    8  |  1022 |
| 14 |   18  |  1023 |

我想得到一个视图,其中将有两列ViewCatID | Flag,其中0(如果没有该列的子类别,则为CatId,否则为{{1}) }。

1 个答案:

答案 0 :(得分:2)

我会计算子类别并在其上进行左连接:

CREATE VIEW my_view AS
SELECT c.CatId, CASE WHEN cnt IS NOT NULL THEN 1 ELSE 0 END AS Flag
FROM   Categoery c
LEFT JOIN (SELECT   CatId, COUNT(*) AS cnt
           FROM     SubCategory
           GROUP BY CatId) s ON c.CatId = s.CatId