簡體   English   中英

如何計算一張表與另一張表的總出現次數

[英]How to count total occurrence from one table with another table

表格1:

ID 姓名 類型 開始 結尾
90 TR1092 一個 02-12-2019 02-12-2019
120 TR1096 一個 02-16-2019 02-16-2019
101 TR1096 一個 02-22-2019 02-22-2019
34 TR1092 一個 02-22-2019 02-22-2019
1 DR9209 一個 02-12-2019 02-12-2019
20 DR9209 一個 02-13-2019 02-13-2019
67 DR8703 一個 02-11-2019 02-11-2019
99 DR8703 一個 02-11-2019 02-11-2019
145 FR2435 一個 02-11-2019 02-11-2019
147 FR2345 一個 02-16-2019 02-16-2019
148 FR2347 一個 02-16-2019 02-16-2019

表 2( SessIDTable 1中的ID匹配):

會話ID 行動
090
090
090
120
034
034
148
148
148
020
067
067
067 沖床
001
147
147
148
099
099

我寫了一個查詢,它為我提供了Table 1中每個Name的總計數:

Select
    CASE
        WHEN T1.Name LIKE 'TR%' THEN 'Town Row'
        WHEN T1.Name LIKE 'DR%' THEN 'Doctor Row'
        WHEN T1.Name LIKE 'FR%' THEN 'Fruit Row'
    END AS Name
    , COUNT(*) AS 'NameTotals'
From
    NamedRecord T1
Where
    T1.Type = 'A'
    AND
    T1.Start >= DATEADD(MONTH, DATEDIFF(Month,0,Getdate(),0)
    AND
    T1.End <= DATEADD(Day,1,Getdate())
Group by
    (
        CASE
            WHEN T1.Name LIKE 'TR%' THEN 'Town Row'
            WHEN T1.Name LIKE 'DR%' THEN 'Doctor Row'
            WHEN T1.Name LIKE 'FR%' THEN 'Fruit Row'
        END
    )
Order By
    Name

結果:

姓名 名稱總計
鎮街 4
醫生行 4
水果行 3

如何更新我的查詢,以便我有一列:

  • WhatHappTotals - 通過將Table 2中的SessID匹配到ID ,然后匹配到Table 1中的Name來計算操作總數

結果將如下所示:

姓名 名稱總計 WhatHappTotals
鎮街 4 6
醫生行 4 8
水果行 3 6
CREATE TABLE One (
    ID    int        NOT NULL PRIMARY KEY,
    Name  varchar(6) NOT NULL,
    Type  varchar(1) NOT NULL,
    Start datetime   NOT NULL,
    End   datetime   NOT NULL
)

CREATE TABLE Two (
    SessId int        NOT NULL PRIMARY KEY,
    Action varchar(5) NOT NULL,

    CONSTRAINT Two_FK_One FOREIGN KEY (SessId) REFERENCES One (ID)
)

SELECT Name, 
    COUNT(DISTINCT ID) AS NameCount,
    COUNT(*) AS WhatHappTotal
FROM (
    SELECT o.ID, o.Type, o.Start, o.End
        CASE 
            WHEN o.Name LIKE 'TR%' THEN 'Town Row'
            WHEN o.Name LIKE 'DR%' THEN 'TDoctor Row'
            WHEN o.Name LIKE 'FR%' THEN 'TFruit Row'
            ELSE NULL
        END AS Name,
        t.Action
    FROM One o
        INNER JOIN Two t ON t.SessId = o.ID
) T
GROUP BY Name
SELECT
    CASE
        WHEN NR.Name LIKE 'TR%' THEN 'Town Row'
        WHEN NR.Name LIKE 'DR%' THEN 'Doctor Row'
        WHEN NR.Name LIKE 'FR%' THEN 'Fruit Row'
    END AS Name,
    COUNT(NR.ID) AS "NameTotals",
    COUNT(SI.SessID) AS "WhatHappTotals"
FROM NameRecord AS NR
JOOIN SessionId AS S1 on SI.SessID = NR.ID
    AND
    NR.Type = 'A'
    AND
    NR.Start >= DATEADD(MONTH, DATEDIFF(Month,0,Getdate(),0)
    AND
    NR.End <= DATEADD(Day,1,Getdate())
Group By Name
Order By Name;

你能試試看它是否有效嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM