我目前处在一个棘手的情况下,我一直无法弄清,我希望大家都能帮助我解决以下问题:
我有一个包含大量列的数据集,但是我只会显示与我的问题相关的列(并且我将其重命名并将其放在Excel文档中)。
我要做的是开发一个SQL查询,以计算PASS结果的总量,然后计算给定房屋名称的FAIL结果的数量。每个结果对应一个特定的居民ID,每个居民ID对应一个特定的房屋名称/房屋ID。不幸的是,值“房间ID”需要包含在此数据集中,并且每个唯一的“房间ID”也对应于特定的“房屋名称/房子ID”。因此,对于给定房屋名称存在的每个唯一的房间ID,都会重复其居民ID。
例如,如果有7个与特定房屋名称/房屋ID相关联的房间ID,则与该特定房屋名称/房屋ID相关联的每个唯一居民ID将重复7次,每个唯一房间ID重复一次。因此,结果也全部重复7次。我已经附上了下面的数据示例。
注意:此处未包含所有数据。 AAAAAA数据还有更多的行未显示,并且还有许多其他的房屋名称/房屋ID。
任何想法都将不胜感激!
答案 0 :(得分:0)
您正在寻找的是GROUP BY。
如果不查看您的数据,很难提出确切的查询,但是我创建了一些测试数据。
create table House (HouseId int, HouseName nvarchar(max));
insert into House (HouseId, HouseName) values (1,'House A'), (2, 'House B'), (3,'House C');
create table Room (RoomId int, RoomName nvarchar(max), HouseId int);
insert into Room (RoomId, RoomName, HouseId)
values
(1,'Room 1 in house A', 1), (2,'Room 2 in house A', 1),
(3,'Room 3 in house B', 2),(4,'Room 4 in house B', 2),
(5,'Room 5 in house C', 3),(6,'Room 6 in house C', 3)
create table Resident (ResidentId int, ResidentName nvarchar(max), RoomId int, Result int);
insert into Resident (ResidentId, ResidentName, RoomId, Result)
values
-- House A = 4 passed, 0 failed
(1, 'Resident 1 in Room 1', 1, 82), (2, 'Resident 2 in Room 1', 1, 76),
(3, 'Resident 3 in Room 2', 2, 91), (4, 'Resident 4 in Room 2', 2, 67),
-- House B = 2 passed, 2 failed
(5, 'Resident 5 in Room 3', 3, 60), (6, 'Resident 6 in Room 3', 3, 64),
(7, 'Resident 7 in Room 4', 4, 28), (8, 'Resident 8 in Room 4', 4, 42),
-- House C = 3 passed, 1 failed
(9, 'Resident 9 in Room 5', 5, 99), (10, 'Resident 10 in Room 5', 5, 57),
(9, 'Resident 11 in Room 6', 6, 75), (10, 'Resident 12 in Room 6', 6, 38)
然后您的查询将类似于:
select
HouseName,
[Passed] = SUM(x.Passed),
[Failed] = SUM(x.Failed)
from
Resident re
outer apply (
--// Logic to determine if they passed or failed
--// I arbitrarily chose the number 50 to be the threshold
select [Passed] = case when re.Result >= 50 then 1 else 0 end,
[Failed] = case when re.Result < 50 then 1 else 0 end
) x
inner join Room r on r.RoomId = re.RoomId
inner join House h on h.HouseId = r.HouseId
group by
h.HouseName