I have this table
ID | PhoneID | PhoneName | Active | Status |
---|---|---|---|---|
1 | 1 | a | 1 | 1 |
2 | 1 | b | 0 | 2 |
3 | 2 | c | 1 | 1 |
4 | 2 | d | 1 | 1 |
5 | 2 | e | 0 | 3 |
6 | 3 | f | 1 | 1 |
7 | 3 | g | 1 | 1 |
8 | 3 | h | 1 | 1 |
9 | 4 | i | 0 | 4 |
10 | 4 | j | 1 | 1 |
And would like to make a query that gives this result as shown below. I want to get all rows where Status = 1. I also want to count the total amount of PhoneIDs and make it a column called Quantity in the query.
ID | PhoneID | PhoneName | Active | Status | Quantity |
---|---|---|---|---|---|
1 | 1 | a | 1 | 1 | 2 |
3 | 2 | c | 1 | 1 | 3 |
4 | 2 | d | 1 | 1 | 3 |
6 | 3 | f | 1 | 1 | 3 |
7 | 3 | g | 1 | 1 | 3 |
8 | 3 | h | 1 | 1 | 3 |
10 | 4 | j | 1 | 1 | 2 |
So far I have tried a query but it isn’t displaying the right result.
SELECT ID, PhoneID, PhoneName, Active, Status, (SELECT Count(PhoneID) FROM Phones) FROM Phones WHERE Status = 1
Advertisement
Answer
You can do this with a subquery which returns the count of each 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