【问题标题】:SQL to merge records based on multiple rulesSQL根据多个规则合并记录
【发布时间】:2017-12-14 16:28:30
【问题描述】:

下面是表格数据

AccountID PolicyNumber State Policy_Expiration_Dt VehicleTypeCode
-----------------------------------------------------------------------------------------------
80102 100 CA 21-12-2017 MC
80102 101 CA 21-12-2017 TR
80102   102 CA 21-12-2017 PP
80103 104 IL 14-12-2017 SO
80103 105 IL 14-12-2017 PP

规则是:

  1. 对于一个帐户,合并具有相同到期日期的策略
  2. 对于一个帐户,合并具有相同状态的策略
  3. 选择每个帐户的最新政策进行合并
  4. 合并策略,车辆类型如下 一种。 MC & TR(如果一个策略有 MC,另一个有 TR,则合并) 湾。 PP(PP不能与任何其他类型合并) C。 SO(SO 不能与任何其他类型合并)

输出应该是

AccountID PolicyNumber State Policy_Expiration_Dt VehicleTypeCode
-----------------------------------------------------------------------------------------------
80102 101 CA 21-12-2017 MC
80102 102 CA 21-12-2017 PP
80103 104 IL 14-12-2017 SO
80103 105 IL 14-12-2017 PP

【问题讨论】:

  • 请向我们展示您尝试过的内容以及您因尝试而遇到的任何错误。

标签: sql merge rules


【解决方案1】:

试试这样的:

--------- CREATING EXAMPLE
CREATE TABLE #Something (
    AccountID INT
    ,PolicyNumber INT
    ,[State] CHAR(2)
    ,Policy_Expiration_Dt DATE
    ,VehicleTypeCode CHAR(2)
    )

INSERT INTO #Something
SELECT 80102,100,'CA','12-21-2017','MC'
UNION ALL SELECT 80102,101,'CA','12-21-2017','TR'
UNION ALL SELECT 80102,102,'CA','12-21-2017','PP'
UNION ALL SELECT 80103,104,'IL','12-14-2017','SO'
UNION ALL SELECT 80103,105,'IL','12-14-2017','PP'
---------END

SELECT a.AccountID
    ,a.Policy_Expiration_Dt
    ,a.[state]
    ,a.VehicleTypeCode
FROM (
    SELECT AccountID
        ,Policy_Expiration_Dt
        ,[state]
        ,CASE 
            WHEN VehicleTypeCode = 'TR'
                THEN 'MC'
            ELSE VehicleTypeCode
            END AS 'VehicleTypeCode'
    FROM #Something
    ) a
GROUP BY a.AccountID
    ,a.Policy_Expiration_Dt
    ,a.[state]
    ,a.VehicleTypeCode

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多