希望大家享受假期和欢乐时光。有机会的时候回复一下。
我正在使用 SQL Server 2005。
问题是 - 我们的一个团队中有一个流程,它按事件/行动的顺序做事。大多数情况下,每个序列都有 4 个动作/事件。这些事件是固定的。当他们执行此 DWH 时,会为每个事件获取一个条目作为单独的行。
示例 1) 致电客户 2) 销售保险 3) 发送 PDS 4) 将详细信息发送给产品团队
我将其设置为所有操作及其定义都在 Dimension_Point_Code 表中。所有来自 DWH 的事件都被视为 Fact 并存储在 Fact_Point
这里的Point是指流程顺序中的Point。
所以存储此信息的表如下所示
尺寸表
CREATE TABLE [tbl_Dim_Point_Code]
(
[Point_Code_Key] [int] IDENTITY(101,1) NOT NULL,
[Point_Code] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Point_Code_TouchPoint] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
事实表
CREATE TABLE [tbl_FACT_Point]
(
[Point_Key] [bigint] IDENTITY(100,1) NOT NULL,
[Point_Code_Key] [int] NOT NULL,
[Customer_Number] [varchar](19) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Sale_Date] [datetime] NULL,
[Rep_ID] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
维度中的数据
INSERT INTO [tbl_Dim_Point_Code]
([Point_Code]
,[Point_Code_TouchPoint])
Select 'CALC' as Point_Code,'Point1' as Point_Code_TouchPoint
UNION
Select 'SELL' as Point_Code,'Point2' as Point_Code_TouchPoint
UNION
Select 'SPDS' as Point_Code,'Point3' as Point_Code_TouchPoint
UNION
Select 'TPRD' as Point_Code,'Point4' as Point_Code_TouchPoint
事实上的数据
INSERT INTO [tbl_FACT_Point]
([Point_Code_Key]
,[Customer_Number]
,[Sale_Date]
,[Rep_ID])
Select 101,'C101501','24-Feb-2012','ABC'
UNION
Select 102,'C101501','24-Feb-2012','ABC'
UNION
Select 103,'C101501','26-Feb-2012','DEF'
UNION
Select 104,'C101501','27-Feb-2012','XYZ'
UNION
Select 101,'C101502','2-Feb-2012','GHI'
UNION
Select 102,'C101502','2-Feb-2012','GHI'
UNION
Select 104,'C101502','4-Feb-2012','XYZ'
UNION
Select 101,'C101503','14-Feb-2012','ABC'
UNION
Select 103,'C101503','20-Feb-2012','ABC'
UNION
Select 104,'C101503','22-Feb-2012','BBC'
UNION
Select 101,'C101501','24-Oct-2012','ABC'
UNION
Select 102,'C101501','24-Oct-2012','ABC'
UNION
Select 103,'C101501','26-Oct-2012','DEF'
UNION
Select 104,'C101501','27-Oct-2012','XYZ'
注意事项 1) 如您所见,客户 C101501 被调用并售出两次。2) 每天都在处理所有相关的事情——比如团队、DWH 和 SQL Server 进程。因此,大多数时候我们不知道会发生什么。我们只会知道事件 1 已经发生。然后几天后的事件 2 等等。3) 101 和 104 是强制性事件。102 和 103 可能会或可能不会发生。无论销售与否,该团队都会联系产品团队。
现在 - 我们想要的是要转置到这个表中的条目
CREATE TABLE [tbl_Process1_EVENT]
(
[HS_EVENT_KEY] [int] IDENTITY(101,1) NOT NULL,
[Customer_Number] [varchar](19) ,
[Import_Date] [datetime] NULL,
[Point1_Date_Called] [datetime] NULL,
[Point1_PointCode] [varchar](8) ,
[Point1_Rep_Id] [varchar](50) ,
[Point2_Date_Sold] [datetime] NULL,
[Point2_PointCode] [varchar](8) ,
[Point2_Rep_Id] [varchar](50) ,
[Point3_Date_PDSSent] [datetime] NULL,
[Point3_PointCode] [varchar](8) ,
[Point3_Rep_Id] [varchar](50) ,
[Point4_Date_ProdTeamXfer] [datetime] NULL,
[Point4_PointCode] [varchar](8) ,
[Point4_Rep_Id] [varchar](50)
) ON [PRIMARY]
我想要发生的是这样的输出。
Customer_Number Import_Date Point1_Date_Called Point1_PointCode Point1_Rep_Id Point2_Date_Sold Point2_PointCode Point2_Rep_Id Point3_Date_PDSSent Point3_PointCode Point3_Rep_Id Point4_Date_ProdTeamXfer Point4_PointCode Point4_Rep_Id
C101501 28/02/2012 24/02/2012 CALC ABC 24/02/2012 SELL ABC 26/02/2012 SPDS DEF 27/02/2012 TPRD XYZ
C101502 3/02/2012 2/02/2012 CALC GHI 2/02/2012 SELL GHI NULL NULL NULL 4/02/2012 TPRD ABC
C101503 23/02/2012 14/02/2012 CALC ABC NULL NULL NULL 20/02/2012 SPDS ABC 22/02/2012 TPRD BBC
C101501 28/10/2012 24/10/2012 CALC ABC 24/10/2012 SELL ABC 26/10/2012 SPDS DEF 27/10/2012 TPRD XYZ
如果对同一客户进行了新销售,则将数据转换为具有 C101501 的新条目的行。Import_date 是更新行的日期。正如我所说,处理每天都在发生。
所以如果我可以为这个输出的第 1 行详细说明这个表
2012 年 2 月 24 日事件 CALC 发生 - 我们知道 2012 年 2 月 25 日这一点 2002 年 2 月 25 日的第 1 点和第 2 点将被填充数据,第 3 点和第 4 点将为空。Import_Date - 将是 25/02/2012
在 26/02/2012 发送 PDS,即第 3 点。因此将更新同一行。只会更新第 3 点。Import_date 将是 27/02/2012
在 27/02/2012 第 4 点事件发生。因此,在 2012 年 2 月 28 日,同一行将使用第 4 点详细信息进行更新。
这就是我能想到的问题。
请随时提供任何帮助,我们将不胜感激。
Njoy 假期,玩得开心。
PS:我可能对输出格式做错了。请建议我可以做得更好。