1

私の目標は、コールを時間で割るだけで1時間あたりのコールを計算する新しい列を作成することである2つのテーブルがあります。ただし、計算を行う前に、まずテーブル2からテーブル1に時間を追加し、対応する名前と日付の時間を追加します。

Table1:

Name    Calls     Hours     Date
--------------------------------------
John    50        3         9/10/2012
Paul    25        2         9/10/2012
Cindy   60        3         9/10/2012
David   50        2.5       9/10/2012
John    45        4         9/9/2012
Paul    50        5         9/9/2012
Cindy   20        2         9/9/2012
David   20        2         9/9/2012

Table 2:

Date         Name     Hours     
------------------------------
9/10/2012    John       1
9/10/2012    Paul       2
9/10/2012    Cindy      2
9/9/2012     John       2.5
9/9/2012     Paul       1.5
9/9/2012     Cindy      0.5

最終的に、私の希望するクエリ出力は次のとおりです。

Name    Calls   TotalHours    CallsPerHour   Date
-----------------------------------------------------
John    50      4             12.5           9/10/2012
Paul    25      4             6.25           9/10/2012
Cindy   60      5             12             9/10/2012
David   50      2.5           20             9/10/2012
John    45      6.5           6.9230         9/9/2012
Paul    50      6.5           7.6923         9/9/2012
Cindy   20      2.5           8              9/9/2012
David   20      2             10             9/9/2012

PS名はdbで一意です。

4

4 に答える 4

3

これはあなたが求めているものですか?

select  t1.name, 
        t1.calls,
        t1.hours + t2.hours as TotalHours,
        t1.calls / (t1.hours + t2.hours) as CallsPerHour,
        t1.date
from    table1 t1 inner join table2 t2 on t1.name = t2.name and t1.date = t2.date
于 2012-09-10T17:06:51.513 に答える
2

JOINテーブルに必要があり、次に適用しますGROUP BY

select t1.name,
    t1.calls,
    sum(t1.hours + nz(t2.hours, 0)) as TotalHours,
    t1.calls / sum(t1.hours + nz(t2.hours, 0)) as CallsPerHour,
    t1.date
from table1 t1
left join table2 t2
    on t1.name = t2.name
    and t1.date = t2.date
group by t1.name, t1.calls, t1.date
于 2012-09-10T17:29:01.337 に答える
1
SELECT Name, SUM(Calls) AS TotalCalls, SUM(Hours) AS TotalHours, 
    SUM(Calls) / SUM(Hours)  AS CallsPerHour, Date
FROM (
    SELECT Name, Calls, Hours, Date FROM Table1
    UNION ALL
    SELECT Name, 0, Hours, Date  FROM Table2
) BothTables
GROUP BY Name, Date
ORDER BY Date DESC, SUM(Calls) / SUM(Hours) DESC
于 2012-09-10T17:09:02.990 に答える
1

Name両方のテーブルはごとに 1つの行しか持てないため、クエリDateは必要ありません。で欠落している名前/日付の組み合わせに対応するためにGROUP BY使用します。LEFT JOINTableTwo

SELECT
    t1.Name, 
    t1.Calls,
    t1.Hours + Nz(t2.Hours,0) AS TotalHours,
    t1.Calls / (t1.Hours + Nz(t2.Hours,0)) AS CallsPerHour,
    t1.Date
FROM
    TableOne AS t1
    LEFT JOIN TableTwo AS t2
    ON
        t1.Name = t2.Name
    AND t1.Date = t2.Date;

修正したサンプル データを使用すると、これがそのクエリの結果セットになります。

Name   Calls TotalHours     CallsPerHour Date
John      50          4             12.5 9/10/2012
Paul      25          4             6.25 9/10/2012
Cindy     60          5               12 9/10/2012
David     50        2.5               20 9/10/2012
John      45        6.5 6.92307692307692  9/9/2012
Paul      50        6.5 7.69230769230769  9/9/2012
Cindy     20        2.5                8  9/9/2012
David     20          2               10  9/9/2012
于 2012-09-10T18:35:50.097 に答える