2

SQL Server クエリを理解するのに苦労しています。リレーショナル モデルはかなり古く (どうやら)、控えめに言ってもあまり最適ではありません。

私のクエリは次のようになります。

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'

このクエリは、重複レコードのロードの結果を返します。つまり、次のようになります。

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

(ここでは多くのレコードを省略しました)

私の質問は次のとおりです。上記のクエリを変更して、重複したレコードをグループ化し、重複requestCountの数を保持する列を作成する方法はありますか? このような:

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

? :-)

前もって感謝します!

4

3 に答える 3

7
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
于 2013-10-16T19:53:07.960 に答える
0
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
于 2013-10-16T19:55:06.830 に答える
-1
    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
于 2013-10-16T19:53:53.717 に答える