T-Sql

TSQL SELECT 語句列出基於欄位值計算的列

  • June 26, 2020

我有一個名為 Table1 的表,其中包含三個欄位 Project ID、EmployeeID、Starting Date。需要一個 select 語句來列出表的所有列,並需要一個附加列來顯示一年以來員工的項目數量。見下圖。

現有表

獲得起始日期 > 2016 年 1 月 1 日的計數(不同的 EmployeeID)就足夠了。但是,我無法弄清楚查詢。有人可以幫忙嗎?

如果項目 id 不同,這很容易通過兩個視窗函式來實現。也許不是最好的表現,但只是從我的手指中流出來。隨意改進:

配置

CREATE TABLE #Table1
(
ProjectID int,
EmployeeID int,
StartingDate DateTime
);

INSERT INTO #Table1 (ProjectID, EmployeeID, StartingDate)
VALUES (1, 1001, '1/1/2005'),
      (2, 1003, '1/1/2019'), 
      (3, 1007, '1/1/2012'),
      (4, 1001, '1/1/2017'),
      (5, 1002, '1/1/2018'), 
      (6, 1003, '1/1/2015'), 
      (7, 1001, '1/1/2016'), 
      (8, 1002, '1/1/2018'), 
      (9, 1004, '1/1/2018'), 
      (10, 10001, '1/1/2018');

查詢;

WITH cte_Count
AS
(
 SELECT t.ProjectID,
        COUNT(*) OVER (PARTITION BY t.EmployeeID ORDER BY t.StartingDate) AS project_count
 FROM #Table1 t
 WHERE t.StartingDate > '1/1/2016'
)
SELECT t.ProjectID,
      t.EmployeeID,
      t.StartingDate,
      MAX(project_count) OVER (PARTITION BY t.EmployeeID) AS project_count_since_2016
FROM #Table1 t
LEFT JOIN cte_Count c ON c.ProjectID = t.ProjectID

第一部分只是過濾不在您想要的範圍內的項目。第二個將此資訊與源表連接起來。

引用自:https://dba.stackexchange.com/questions/230009