у меня есть эта таблица
Я БЫ | Идентификатор телефона | Имя телефона | Активный | Статус |
---|---|---|---|---|
1 | 1 | а | 1 | 1 |
2 | 1 | б | 0 | 2 |
3 | 2 | с | 1 | 1 |
4 | 2 | 1 | 1 | |
5 | 2 | е | 0 | 3 |
6 | 3 | ф | 1 | 1 |
7 | 3 | грамм | 1 | 1 |
8 | 3 | час | 1 | 1 |
9 | 4 | я | 0 | 4 |
10 | 4 | Дж | 1 | 1 |
И хотел бы сделать запрос, который дает этот результат, как показано ниже. Я хочу получить все строки, где Статус = 1. Я также хочу подсчитать общее количество PhoneID и сделать его столбцом с именем Количество в запросе.
Я БЫ | Идентификатор телефона | Имя телефона | Активный | Статус | Количество |
---|---|---|---|---|---|
1 | 1 | а | 1 | 1 | 2 |
3 | 2 | с | 1 | 1 | 3 |
4 | 2 | 1 | 1 | 3 | |
6 | 3 | ф | 1 | 1 | 3 |
7 | 3 | грамм | 1 | 1 | 3 |
8 | 3 | час | 1 | 1 | 3 |
10 | 4 | Дж | 1 | 1 | 2 |
До сих пор я пробовал запрос, но он не отображает правильный результат.
SELECT ID, PhoneID, PhoneName, Active, Status, (SELECT Count(PhoneID) FROM Phones)
FROM Phones
WHERE Status = 1
SELECT Count(PhoneID) FROM Phones
не имеет предложения WHERE, чтобы ограничить его статусом, который вы хотите.
Вам действительно нужен ответ, чтобы решить проблему, а не просто указать, что не так, то есть, как это делают другие ответы на этот вопрос.
Вам нужно коррелировать ваш подзапрос, попробуйте:
SELECT ID, PhoneID, PhoneName, Active, Status,
(SELECT Count(*) FROM Phones p2 WHERE p2.PhoneId = p.PhoneId) Quantity
FROM Phones p
WHERE Status = 1;
Вы можете сделать это с помощью подзапроса, который возвращает количество каждого PhoneID:
SELECT t.ID, t.PhoneID, t.PhoneName, t.Active, t.Status, q.[Quantity]
FROM Phones as t
inner join
(
select PhoneID, COUNT(PhoneID) as [Quantity]
from Phones
group by PhoneID
) as q
on q.[PhoneID] = t.[PhoneID]
WHERE t.Status = 1
Это была просто опечатка.