0

希望大家享受假期和欢乐时光。有机会的时候回复一下。

我正在使用 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:我可能对输出格式做错了。请建议我可以做得更好。

4