CodeMine Ответов: 2

Соединение Sql server с агрегатными функциями


У меня есть следующие таблицы с данными, приведенными ниже

Batch-Information
-----------------
Batch-code	total-seats	
----------      -----------
b1		30
b2		25
b3		35
b4		40




Admission-Information
---------------------
Admno	Sname	Batch-code
-----   -----   ----------
1	a	b1
2	b	b3
3	c	b3
4	d	b3
5	e	b1
6	f	b4
7	g	b2
8	h	b4
9	i	b1
10	j	b2


Я хочу написать запрос, чтобы показать результат следующим образом

Batch-code	total-seats	Filled-Seats	Vacant-seats
----------      -----------     ------------    ------------
b1		30		3		27
b2		25		2		23
b3		35		3		32
b4		40		2		38




Но я не понял, как подсчитать общее количество заполненных мест, свободных мест и т. д. В запросе.
Заранее спасибо за помощь

Что я уже пробовал:

SELECT * FROM Admission-Information AA LEFT OUTER JOIN Batch-Information e2
ON AA.Batch-Code = BB.Batch-Code


Также попробовал count (*), но безуспешно

2 Ответов

Рейтинг:
2

Member 13632036

SELECT Batchcode,
	totalseats,
	isnull((
			SELECT COUNT(1)
			FROM @AdmissionInformation a
			WHERE a.Batchcode = b.Batchcode
			GROUP BY Batchcode
			), 0) AS FilledSeats,
	totalseats - isnull((
			SELECT COUNT(1)
			FROM @AdmissionInformation a
			WHERE a.Batchcode = b.Batchcode
			GROUP BY Batchcode
			), 0) AS Vacantseats
FROM @BatchInformation b


Рейтинг:
12

OriginalGriff

Возможно, вам нужно добавить группу по:

SELECT [Batch-Code], COUNT(*) AS Filled FROM [Admission-Information]
GROUP BY [Batch-code]
Даст вам "заполненные места", которые вам нужны, так что все, что вам нужно сделать, это присоединиться к этому:
SELECT b.[Batch-code] , b.[Total-Seats], fs.Filled, b.[Total-Seats] - fs.Filled AS [Vacant-seats]
FROM [Batch-Information] b
JOIN (SELECT [Batch-Code], COUNT(*) AS Filled FROM [Admission-Information]
      GROUP BY [Batch-code]) fs 
ON b.[Batch-code] = fs.[Batch-code]
Что даст вам то, что вы хотели.


CodeMine

спасибо, что это решило мою проблему. спасибо большое