我有 5 名員工的 ID 值為:111、222、333、444、555。
我有一個源資料集,其中包含 2021 年 3 月 28 日和 2021 年 4 月 5 日之間所有日歷日的所有五個資料集的資料。(這只是我實際資料的一個小樣本子集)。
您可以使用這些腳本來查看源資料的示例:
CREATE TABLE #SourceDataset
(
EmployeeId int,
PayGroupName varchar(100),
PayTypeName varchar(100),
SiteName varchar(100),
Region varchar(100),
PercentageScore int,
Center int,
[Function] varchar(100),
Department varchar(100),
EverySingleCalendarDate date
)
--- for Employee ID = 111 ---
INSERT INTO #SourceDataset
VALUES (111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 100, 17, 'WQ', 'FG', '3/28/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 100, 17, 'WQ', 'FG', '3/29/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 100, 17, 'WQ', 'FG', '3/30/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 100, 17, 'WQ', 'FG', '3/31/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 100, 17, 'WQ', 'FG', '4/1/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 56, 'WQ', 'FG', '4/2/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 80, 'WQ', 'FG', '4/2/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 56, 'WQ', 'FG', '4/3/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 80, 'WQ', 'FG', '4/3/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 56, 'WQ', 'FG', '4/4/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 80, 'WQ', 'FG', '4/4/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 56, 'WQ', 'FG', '4/5/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 80, 'WQ', 'FG', '4/5/2021')
--- for Employee ID = 111 ---
--- for Employee ID = 222 ---
INSERT INTO #SourceDataset
VALUES
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '3/28/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '3/29/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '3/30/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 20, 'WR', 'FY', '3/31/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 20, 'WR', 'FY', '4/1/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 25, 19, 'RH', 'FG', '4/2/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 75, 19, 'DP', 'FG', '4/2/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 25, 19, 'RH', 'FG', '4/3/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 75, 19, 'DP', 'FG', '4/3/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '4/4/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '4/5/2021')
--- for Employee ID = 222 ---
--- for Employee ID = 333 ---
INSERT INTO #SourceDataset
VALUES
(333, 'Weekly', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/28/2021'),
(333, 'Weekly PT', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/29/2021'),
(333, 'Weekly PT', 'Temporary', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/30/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/31/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '4/1/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 40, 19, 'WQ', 'PQ', '4/2/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 60, 19, 'WQ', 'AD', '4/2/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 40, 19, 'WQ', 'PQ', '4/3/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 60, 19, 'WQ', 'AD', '4/3/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 40, 19, 'WQ', 'PQ', '4/4/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 60, 19, 'WQ', 'AD', '4/4/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 40, 19, 'WQ', 'PQ', '4/5/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 60, 19, 'WQ', 'AD', '4/5/2021')
--- for Employee ID = 333 ---
--- for Employee ID = 444 ---
INSERT INTO #SourceDataset
VALUES
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/28/2021'),
(444, 'Weekly', 'FT-Optional', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/29/2021'),
(444, 'Weekly', 'FT-Optional', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/30/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/31/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '4/1/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 10, 'AB', 'FG', '4/2/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 11, 'HP', 'FG', '4/2/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 10, 'AB', 'FG', '4/3/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 11, 'HP', 'FG', '4/3/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 65, 29, 'RR', 'FG', '4/4/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 35, 37, 'QQ', 'FG', '4/4/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 10, 'AB', 'FG', '4/5/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 11, 'HP', 'FG', '4/5/2021')
--- for Employee ID = 444 ---
--- for Employee ID = 555 ---
INSERT INTO #SourceDataset
VALUES
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 100, 19, 'WQ', 'FG', '3/28/2021'),
(555, 'WeeklyOptional', 'PT', 'StoreHouse2', 'RIC', 100, 19, 'WQ', 'FG', '3/29/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 100, 19, 'WQ', 'FG', '3/30/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 100, 19, 'WQ', 'FG', '3/31/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 100, 19, 'WQ', 'FG', '4/1/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 40, 23, 'BB', 'MA', '4/2/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 25, 24, 'CV', 'RU', '4/2/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 35, 25, 'FJ', 'BN', '4/2/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 40, 23, 'BB', 'MA', '4/3/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 25, 24, 'CV', 'RU', '4/3/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 35, 25, 'FJ', 'BN', '4/3/2021'),
(555, 'Weekly-NonOptional', 'FT', 'StoreHouse156', 'RIC', 33, 23, 'BB', 'MA', '4/4/2021'),
(555, 'Weekly-NonOptional', 'FT', 'StoreHouse156', 'RIC', 33, 24, 'CV', 'RU', '4/4/2021'),
(555, 'Weekly-NonOptional', 'FT', 'StoreHouse156', 'RIC', 34, 25, 'FJ', 'BN', '4/4/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 40, 23, 'BB', 'MA', '4/5/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 25, 24, 'CV', 'RU', '4/5/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 35, 25, 'FJ', 'BN', '4/5/2021')
--- for Employee ID = 555 ---
SELECT *
FROM #SourceDataset
ORDER BY EmployeeId, EverySingleCalendarDate
---------------------------------------------------
目標:我正在嘗試跟蹤員工如何在一段時間內獲得 100% 的百分比分數,并開發組來顯示此資訊,使用新的MinDate和MaxDate列,以顯示組存在的日期范圍。在此處提到的時間段內(2021 年 3 月 28 日至 2021 年 4 月 5 日),任何員工的日歷天數都沒有間隔。
關于源資料集的說明:
員工可以在給定日歷日的一行中獲得 100% 的百分比分數,每列都有一個唯一值 - 中心、職能、部門。或者,她可以在另一個日歷日獲得 100% 的百分比分數,這 3 列的不同組合 - 中心、職能、部門 - 在多行中,百分比分數拆分(例如,40 25 35 三行(或) 50 50 分兩行),該日歷日的總和為 100%。查看源資料集上的示例查詢以了解我的意思。
源資料集的開發方式是 - 每個日歷日必須占任何員工的 100%,并且日歷日??之間沒有間隙。對于員工而言,這 4 列(PayGroupName、PayTypeName、SiteName、Region)的更改僅發生在日歷日級別,而不是 PercentageScore 列級別或中心、功能、部門列級別。
Example:
SELECT *
FROM #SourceDataset
WHERE EmployeeId = 111
AND EverySingleCalendarDate = '2021-03-28'
--100 % Percentage Score in one row--
SELECT *
FROM #SourceDataset
WHERE EmployeeId = 111
AND EverySingleCalendarDate = '2021-04-02'
--100 % Percentage Score in two rows (50 50)--
SELECT *
FROM #SourceDataset
WHERE EmployeeId = 555
AND EverySingleCalendarDate = '2021-04-02'
--100 % Percentage Score in three rows (40 25 35)--
我的目標是跟蹤每個員工在一段時間內(從 3 月 28 日到 4 月 5 日)如何獲得 100% 的百分比分數,這些天的所有 5 名員工的資料都可用,并且在日歷天數中沒有間隔源資料集。
The number of rows for an employee on a given calendar day, will depend on how she attains 100 % Percentage Score, either in one row or multiple rows. The 'number of rows' (on a calendar day for any employee) will essentially depend on the set of 3 columns - Center, Function, Department.
Another important point: the columns - PayGroupName, PayTypeName, SiteName, Region - will ALWAYS have exactly one unique value for an employee on a given calendar day. So the number of rows for an employee on a given calendar is NOT determined by these columns - PayGroupName, PayTypeName, SiteName, Region.
This said, the data under each of these columns (PayGroupName, PayTypeName, SiteName, Region) can change between calendar days for an employee, and we need to track this too. See example queries on the source dataset below:
SELECT *
FROM #SourceDataset
WHERE EmployeeId = 333
AND EverySingleCalendarDate BETWEEN '2021-03-28' AND '2021-03-30'
--PayGroupName and PayTypeName change between days for this employee (333)--
SELECT *
FROM #SourceDataset
WHERE EmployeeId = 555
AND EverySingleCalendarDate BETWEEN '2021-04-03' AND '2021-04-04'
/*
PayGroupName and SiteName change between days for this employee (555);
and its' very important to to note that for an employee, the change for these 4 columns
(PayGroupName, PayTypeName, SiteName, Region) can happen only at the calendar day level, NOT at the
level of Percentage Score or at the level of the columns - Center, Function, Department.
In essence, the change for these 4 columns (PayGroupName, PayTypeName, SiteName, Region) for an
employee can happen ONLY at the level of a calendar day.
*/
A few weeks back, I posted a question on this same topic, but the data set was easier, with exactly one row for an employee on any given calendar day.
Today, I have a similar but a challenging situation, in which there can be multiple rows for an employee on a given calendar day. This is based on how an employee (say Employee ID = 111) attains 100 % Percentage Score, for a calendar day, say Mar 28, 2021.
I have the desired output dataset, both as a temp table using T-SQL and as a tabular output, so that you can get an absolute clear picture of the problem I have at hand.
Desired Output:
CREATE TABLE #DesiredOutput
(
EmployeeId int,
PayGroupName varchar(100),
PayTypeName varchar(100),
SiteName varchar(100),
Region varchar(100),
PercentageScore int,
Center int,
[Function] varchar(100),
Department varchar(100),
MinDate date,
MaxDate date
)
INSERT INTO #DesiredOutput
VALUES
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 100, 17, 'WQ', 'FG', '3/28/2021', '4/1/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 56, 'WQ', 'FG', '4/2/2021', '4/5/2021'),
(111, 'Biweekly', 'Salaried', 'Shop Floor', 'NYC', 50, 80, 'WQ', 'FG', '4/2/2021', '4/5/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '3/28/2021', '3/30/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 20, 'WR', 'FY', '3/31/2021', '4/1/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 25, 19, 'RH', 'FG', '4/2/2021', '4/3/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 75, 19, 'DP', 'FG', '4/2/2021', '4/3/2021'),
(222, 'Monthly', 'PartTime', 'Office Room', 'POR', 100, 19, 'WQ', 'FG', '4/4/2021', '4/5/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/28/2021', '3/28/2021'),
(333, 'Weekly PT', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/29/2021', '3/29/2021'),
(333, 'Weekly PT', 'Temporary', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/30/2021', '3/30/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 100, 19, 'WQ', 'FG', '3/31/2021', '4/1/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 40, 19, 'WQ', 'PQ', '4/2/2021', '4/5/2021'),
(333, 'Weekly', 'Contract', 'Store', 'ATL', 60, 19, 'WQ', 'AD', '4/2/2021', '4/5/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/28/2021', '3/28/2021'),
(444, 'Weekly', 'FT-Optional', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/29/2021', '3/30/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 100, 19, 'WQ', 'FG', '3/31/2021', '4/1/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 10, 'AB', 'FG', '4/2/2021', '4/3/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 11, 'HP', 'FG', '4/2/2021', '4/3/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 65, 29, 'RR', 'FG', '4/4/2021', '4/4/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 35, 37, 'QQ', 'FG', '4/4/2021', '4/4/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 10, 'AB', 'FG', '4/5/2021', '4/5/2021'),
(444, 'Weekly', 'FT', 'StoreHouse', 'MIA', 50, 11, 'HP', 'FG', '4/5/2021', '4/5/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 100, 19, 'WQ', 'FG', '3/28/2021', '3/28/2021'),
(555, 'WeeklyOptional', 'PT', 'StoreHouse2', 'RIC', 100, 19, 'WQ', 'FG', '3/29/2021', '3/29/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 100, 19, 'WQ', 'FG', '3/30/2021', '4/1/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 40, 23, 'BB', 'MA', '4/2/2021', '4/3/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 25, 24, 'CV', 'RU', '4/2/2021', '4/3/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 35, 25, 'FJ', 'BN', '4/2/2021', '4/3/2021'),
(555, 'Weekly-NonOptional', 'FT', 'StoreHouse156', 'RIC', 33, 23, 'BB', 'MA', '4/4/2021', '4/4/2021'),
(555, 'Weekly-NonOptional', 'FT', 'StoreHouse156', 'RIC', 33, 24, 'CV', 'RU', '4/4/2021', '4/4/2021'),
(555, 'Weekly-NonOptional', 'FT', 'StoreHouse156', 'RIC', 34, 25, 'FJ', 'BN', '4/4/2021', '4/4/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 40, 23, 'BB', 'MA', '4/5/2021', '4/5/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 25, 24, 'CV', 'RU', '4/5/2021', '4/5/2021'),
(555, 'Weekly', 'FT', 'StoreHouse1', 'RIC', 35, 25, 'FJ', 'BN', '4/5/2021', '4/5/2021')
SELECT *
FROM #DesiredOutput
ORDER BY EmployeeId, MinDate
I need to use #SourceDataset and convert it to #DesiredOutput.
I need some advice.
For example, the #DesiredOutput (in tabular form) looks as below for an employee (111), and for all employees:
| EmployeeId | PayGroupName | PayTypeName | SiteName | Region | PercentageScore | Center | Function | Department | MinDate | MaxDate |
|---|---|---|---|---|---|---|---|---|---|---|
| 111 | Biweekly | Salaried | Shop Floor | NYC | 100 | 17 | WQ | FG | 3/28/2021 | 4/1/2021 |
| 111 | Biweekly | Salaried | Shop Floor | NYC | 50 | 56 | WQ | FG | 4/2/2021 | 4/5/2021 |
| 111 | Biweekly | Salaried | Shop Floor | NYC | 50 | 80 | WQ | FG | 4/2/2021 | 4/5/2021 |
| EmployeeId | PayGroupName | PayTypeName | SiteName | Region | PercentageScore | Center | Function | Department | MinDate | MaxDate |
|---|---|---|---|---|---|---|---|---|---|---|
| 111 | Biweekly | Salaried | Shop Floor | NYC | 100 | 17 | WQ | FG | 3/28/2021 | 4/1/2021 |
| 111 | Biweekly | Salaried | Shop Floor | NYC | 50 | 56 | WQ | FG | 4/2/2021 | 4/5/2021 |
| 111 | Biweekly | Salaried | Shop Floor | NYC | 50 | 80 | WQ | FG | 4/2/2021 | 4/5/2021 |
| 222 | Monthly | PartTime | Office Room | POR | 100 | 19 | WQ | FG | 3/28/2021 | 3/30/2021 |
| 222 | Monthly | PartTime | Office Room | POR | 100 | 20 | WR | FY | 3/31/2021 | 4/1/2021 |
| 222 | Monthly | PartTime | Office Room | POR | 25 | 19 | RH | FG | 4/2/2021 | 4/3/2021 |
| 222 | Monthly | PartTime | Office Room | POR | 75 | 19 | DP | FG | 4/2/2021 | 4/3/2021 |
| 222 | Monthly | PartTime | Office Room | POR | 100 | 19 | WQ | FG | 4/4/2021 | 4/5/2021 |
| 333 | Weekly | Contract | Store | ATL | 100 | 19 | WQ | FG | 3/28/2021 | 3/28/2021 |
| 333 | WeeklyPT | Contract | Store | ATL | 100 | 19 | WQ | FG | 3/29/2021 | 3/29/2021 |
| 333 | WeeklyPT | Temporary | Store | ATL | 100 | 19 | WQ | FG | 3/30/2021 | 3/30/2021 |
| 333 | Weekly | Contract | Store | ATL | 100 | 19 | WQ | FG | 3/31/2021 | 4/1/2021 |
| 333 | Weekly | Contract | Store | ATL | 40 | 19 | WQ | PQ | 4/2/2021 | 4/5/2021 |
| 333 | Weekly | Contract | Store | ATL | 60 | 19 | WQ | AD | 4/2/2021 | 4/5/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 100 | 19 | WQ | FG | 3/28/2021 | 3/28/2021 |
| 444 | Weekly | FT-Optional | StoreHouse | MIA | 100 | 19 | WQ | FG | 3/29/2021 | 3/30/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 100 | 19 | WQ | FG | 3/31/2021 | 4/1/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 50 | 10 | AB | FG | 4/2/2021 | 4/3/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 50 | 11 | HP | FG | 4/2/2021 | 4/3/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 65 | 29 | RR | FG | 4/4/2021 | 4/4/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 35 | 37 | FG | 4/4/2021 | 4/4/2021 | |
| 444 | Weekly | FT | StoreHouse | MIA | 50 | 10 | AB | FG | 4/5/2021 | 4/5/2021 |
| 444 | Weekly | FT | StoreHouse | MIA | 50 | 11 | HP | FG | 4/5/2021 | 4/5/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 100 | 19 | WQ | FG | 3/28/2021 | 3/28/2021 |
| 555 | WeeklyOptional | PT | StoreHouse2 | RIC | 100 | 19 | WQ | FG | 3/29/2021 | 3/29/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 100 | 19 | WQ | FG | 3/30/2021 | 4/1/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 40 | 23 | BB | MA | 4/2/2021 | 4/3/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 25 | 24 | CV | RU | 4/2/2021 | 4/3/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 35 | 25 | FJ | BN | 4/2/2021 | 4/3/2021 |
| 555 | Weekly-NonOPTional | FT | StoreHouse156 | RIC | 33 | 23 | BB | MA | 4/4/2021 | 4/4/2021 |
| 555 | Weekly-NonOPTional | FT | StoreHouse156 | RIC | 33 | 24 | CV | RU | 4/4/2021 | 4/4/2021 |
| 555 | Weekly-NonOPTional | FT | StoreHouse156 | RIC | 34 | 25 | FJ | BN | 4/4/2021 | 4/4/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 40 | 23 | BB | MA | 4/5/2021 | 4/5/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 25 | 24 | CV | RU | 4/5/2021 | 4/5/2021 |
| 555 | Weekly | FT | StoreHouse1 | RIC | 35 | 25 | FJ | BN | 4/5/2021 | 4/5/2021 |
Any idea on how to develop the desired output?
The table data at the lower end is the full table, which may be difficult to scroll through; so I have a smaller version for Employee ID = 111 at the top, and the entire desired output next. Alternately, you can use the T-SQL scripts to get an idea of the #DesiredOutput dataset.
uj5u.com熱心網友回復:
使用的方法:
- 計算一個標志以指示超過 1 天的差距。
- 創建基于總和標志的排名。
- 將其分組,包括計算出的排名。
SELECT EmployeeId, PayGroupName, PayTypeName, SiteName,
Region, PercentageScore,Center, [Function], Department
, MIN(EverySingleCalendarDate) MinDate
, MAX(EverySingleCalendarDate) MaxDate
INTO #tmpResults
FROM (
SELECT *
, Rnk = SUM(Flag) OVER (PARTITION BY EmployeeId, PayGroupName, PayTypeName, SiteName,
Region, PercentageScore,Center, [Function], Department ORDER BY EverySingleCalendarDate)
FROM
(
SELECT *
, Flag = IIF(1=DATEDIFF(day, LAG(EverySingleCalendarDate) OVER (PARTITION BY EmployeeId, PayGroupName, PayTypeName, SiteName,
Region, PercentageScore,Center, [Function], Department ORDER BY EverySingleCalendarDate), EverySingleCalendarDate),0,1)
FROM #SourceDataset
) q1
) q2
GROUP BY EmployeeId, PayGroupName, PayTypeName, SiteName,
Region, PercentageScore,Center, [Function], Department, Rnk
ORDER BY EmployeeId, MinDate;
SELECT * FROM #tmpResults;
-- -- Differences -- SELECT * FROM #tmpResults EXCEPT SELECT * FROM #DesiredOutput; SELECT * FROM #DesiredOutput EXCEPT SELECT * FROM #tmpResults; GO員工編號 | 支付組名稱 | 支付型別名稱 | 站點名稱 | 地區 | 百分比分數 | 中心 | 功能 | 部門 | 最小日期 | 最大日期 ---------: | :----------- | :---------- | :------- | :----- | --------------: | -----: | :------- | :--------- | :------ | :------ 員工編號 | 支付組名稱 | 支付型別名稱 | 站點名稱 | 地區 | 百分比分數 | 中心 | 功能 | 部門 | 最小日期 | 最大日期 ---------: | :----------- | :---------- | :------- | :----- | --------------: | -----: | :------- | :--------- | :------ | :------
db<>在這里擺弄
uj5u.com熱心網友回復:
這正是@LukStorms 所提供的,但格式更好,以便任何人都可以使用此代碼。非常感謝您的支持。
SELECT
k.EmployeeId,k.PayGroupName,k.PayTypeName,k.SiteName,k.Region,k.PercentageScore,k.Center,k.[Function],k.Department,
MIN(k.EverySingleCalendarDate) AS MinDate,
MAX(k.EverySingleCalendarDate) AS MaxDate
FROM
(
SELECT
g.*,
SUM(g.Flag) OVER
(
PARTITION BY
g.EmployeeId,g.PayGroupName,g.PayTypeName,g.SiteName,g.Region,g.PercentageScore,g.Center,g.[Function],g.Department
ORDER BY g.EverySingleCalendarDate
) AS Rnk
FROM
(
SELECT
*,
Flag = CASE
WHEN DATEDIFF(dd,
LAG(EverySingleCalendarDate,1) OVER
(PARTITION BY
EmployeeId,PayGroupName,PayTypeName,SiteName,Region,PercentageScore,Center,[Function],Department
ORDER BY EverySingleCalendarDate),
EverySingleCalendarDate) = 1 THEN 0
ELSE 1
END
FROM
#SourceDataset
) g
) k
GROUP BY
k.EmployeeId,k.PayGroupName,k.PayTypeName,k.SiteName,k.Region,k.PercentageScore,k.Center,k.[Function],k.Department,
k.Rnk
--note the Rnk column in the GROUP BY
--ORDER BY k.EmployeeId, MinDateRange
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374190.html
標籤:sql-server tsql partition gaps-and-islands row-number
