bomortensen
bomortensen

Reputation: 3396

Count unique rows in SQL Server query

I'm having some trouble figuring out a SQL Server query. The relational model is quite old (it seems) and is not very optimal, to say the least.

My query looks like this:

SELECT 
    [RequestUsers].requestId, [Requests].name, [Requests].isBooked
FROM 
    [RequestUsers]
JOIN 
    [Requests] ON [RequestUsers].requestId = [Requests].id
WHERE 
    [RequestUsers].dateRequested >= '10-01-2013'
    AND [RequestUsers].dateRequested <= '10-16-2013'

This query gives a result of loads of duplicated records, i.e.:

id      name        isBooked
-----------------------------
1393    Request1       0
1393    Request1       0
1393    Request1       0    
1394    Request2       0
1394    Request2       0
1399    Request3       0
1399    Request3       0
1399    Request3       0
1399    Request3       0
1399    Request3       0

(I omitted lots of records here)

My question is: is there any way to modify the above query to group the duplicated records and make a requestCount column which holds the number of duplicates? Like this:

id      name        isBooked     requestCount
---------------------------------------------
1393    Request1       0              3
1399    Request2       0              2
1393    Request3       0              5

? :-)

Thanks in advance!

Upvotes: 2

Views: 603

Answers (3)

JTFRage
JTFRage

Reputation: 397

    SELECT Distinct([RequestUsers].requestId), [Requests].name, [Requests].isBooked, Count([RequestUsers].requestId) as requestCount
    FROM [RequestUsers]
    JOIN [Requests]
    ON [RequestUsers].requestId = [RequestUsers].id
    WHERE [RequestUsers].dateRequested >= '10-01-2013'
    AND [RequestUsers].dateRequested <= '10-16-2013'
    GROUP BY [RequestUsers].requestId

Upvotes: -1

Giannis Paraskevopoulos
Giannis Paraskevopoulos

Reputation: 18411

SELECT [RequestUsers].requestId, 
       [Requests].name, 
       [Requests].isBooked,
       Count(*) AS requestCount
FROM   [RequestUsers]
       JOIN [Requests]
           ON [RequestUsers].requestId = [Requests].id
WHERE  [RequestUsers].dateRequested >= '10-01-2013'
       AND [RequestUsers].dateRequested <= '10-16-2013'
GROUP BY [RequestUsers].requestId, 
       [Requests].name, 
       [Requests].isBooked

Upvotes: 7

Justin Lessard
Justin Lessard

Reputation: 11901

SELECT [RequestUsers].requestId, [Requests].name, [Requests].isBooked,
COUNT([RequestUsers].requestId) "requestCount"
FROM [RequestUsers]
JOIN [Requests]
ON [RequestUsers].requestId = [RequestUsers].id
WHERE [RequestUsers].dateRequested >= '10-01-2013'
AND [RequestUsers].dateRequested <= '10-16-2013'
GROUP BY [RequestUsers].requestId, [Requests].name, [Requests].isBooked

Upvotes: 0

Related Questions