问题描述
有3个表:
Table A
aNo | aName | aCity
A1 | Alex | Ohio
A2 | Nick | LA
A3 | Sam | Seatle
A4 | Rick | Sydney
.
.
.
Table B
bNo | aNo | bType
B1 | A1 | big
B2 | A1 | small
B3 | A1 | small
B1 | A4 | Medium
B2 | A4 | tiny
B3 | A4 | Big
.
.
Table C
aNo | cDate | bNo
A1 | 2011 | B2
A2 | 2006 | B2
A3 | 1993 | B1
A4 | 2018 | B3
A4 | 2013 | B3
A4 | 2002 | B3
.
.
我需要创建一个视图,向我显示aName,bType和SUM(仅TableB.aNo [A1,A4])
它应该向我显示以下内容:
aName | bType | A1 and A4 quantity
Alex | Big | 1
Alex | Medium| Null
Alex | small | 2
Alex | tiny | Null
Rick | Big | 1
Rick | Medium| 1
Rick | small | Null
Rick | Tiny | 1
我尝试过:
CREATE VIEW v_A1A4
AS
SELECT
A.aName,B.bType,sum(C.aNo) AS Rooms_Total
FROM
A
INNER JOIN Room ON B.aNo = A.aNo
INNER JOIN C ON C.aNo = A.aNo
WHERE C.aNo = 'A1' AND C.aNo = 'A4';
SELECT * FROM v_A1A4;
但这显示了新的VIEW表。但所有值均为NULL。
aName | bType | A1 and A4 quantity
NULL | NULL | NULL
我需要显示值A1和A2的数量。
我该怎么办?
解决方法
如果我理解正确,您只想填写表a
和b
之间的缺失值。我不确定应该在c
表中做什么,但似乎并不需要。
select a.ano,t.type,count(b.ano)
from a cross join
(select distinct type from b) t left join
b
on a.ano = b.ano and b.type = t.type
group by a.ano,t.type;