Preciso de uma consulta T-SQL que possa juntar várias tabelas, mas também retornar contagens de cada uma. Sei fazer cada parte separadamente, mas não consigo fazer com que funcionem juntas.
Dado este esquema SQL:
CREATE TABLE [House]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Price] DECIMAL (5, 2) NOT NULL,
);
CREATE TABLE [Floor]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[HouseId] INT NOT NULL,
CONSTRAINT [FK_Floor_HouseId]
FOREIGN KEY ([HouseId]) REFERENCES [House] ([Id])
);
CREATE TABLE [Room]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[FloorId] INT NOT NULL,
[Type] VARCHAR,
CONSTRAINT [FK_Room_FloorId]
FOREIGN KEY ([FloorId]) REFERENCES [Floor] ([Id])
);
Preciso de uma consulta SQL que retornará uma única lista com as seguintes informações, entendo que a consulta provavelmente será confusa.
Pode haver uma maneira melhor, mas resolvi agrupando pelo ID da casa e usando apenas a função max para obter o preço. Existem várias linhas, todas com o mesmo preço, mas eu só precisava pegar uma delas.
SELECT [House].[Id],
MAX([House].[Price]),
COUNT(distinct [Floor].[Id]) AS [FloorCount],
COUNT(distinct [Room].[Id]) as [TotalRoomCount],
SUM(CASE WHEN [Type] = 'Bedroom' THEN 1 ELSE 0 END) AS [BedroomCount]
FROM [House]
LEFT JOIN [Floor] ON [Floor].[HouseId] = [House].[Id]
LEFT JOIN [Room] on [Room].[FloorId] = [Floor].[Id]
GROUP BY [House].[Id];
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras