【发布时间】:2014-04-18 21:42:29
【问题描述】:
我有一个 CTE,我在其中找到匹配 5 列的重复记录:
;WITH DuplicateCount AS
(
SELECT
FirstName,
LastName,
DateofBirth,
Email,
c1.Status,
Count(*) AS TotalCount
FROM Customer c
INNER JOIN Customer_1 c1 ON c1.customerID = c.customerID
GROUP BY FirstName, LastName, DateofBirth, Email, c1.Status
HAVING COUNT(*) > 1
)
然后我从该 CTE 中选择 Status 和 TotalCount 并加入 Enum 表以生成可读数据
;WITH DuplicateCount AS
(
SELECT
FirstName,
LastName,
DateofBirth,
Email,
c1.Status,
Count(*) AS TotalCount
FROM Customer c
INNER JOIN Customer_1 c1 ON c1.customerID = c.customerID
GROUP BY FirstName, LastName, DateofBirth, Email, c1.Status
HAVING COUNT(*) > 1
)
SELECT e.Display, dc.TotalCount
FROM DuplicateCount dc
INNER JOIN Enum e ON dc.Status = e.Index
在这种情况下,我能够提取可读数据并使用 Excel 按状态吐出重复的图表报告。
问题
我需要再次加入Customer_1 表以再收集一列:Stage。以下是我尝试的方法:
;WITH DuplicateCount AS
(
SELECT customerID,
FirstName,
LastName,
DateofBirth,
Email,
c1.Status,
Count(*) AS TotalCount
FROM Customer c
INNER JOIN Customer_1 c1 ON c1.customerID = c.customerID
GROUP BY customerID, FirstName, LastName, DateofBirth, Email, c1.Status
HAVING COUNT(*) > 1
)
SELECT e.Display,
CASE
WHEN c1.Stage = 6 THEN 'First'
WHEN c1.Stage = 7 THEN 'Second'
WHEN c1.Stage = 8 THEN 'Third'
WHEN c1.Stage = 11 THEN 'Fourth'
WHEN c1.Stage = 9 THEN 'Fifth'
WHEN c1.Stage = 10 THEN 'Sixth'
WHEN c1.Stage = 12 THEN 'Unknown'
ELSE ''
END AS Stage,
dc.TotalCount
FROM DuplicateCount dc
INNER JOIN Enum e ON dc.Status = e.Index
INNER JOIN Customer_1 c1 ON c1.customerID = dc.customerID
显然,这不起作用,因为我的所有记录都不会有重复的 PK。
有没有办法在没有 PK 的情况下将表加入我的 CTE?或者以某种方式将 PK 添加到我的 CTE 而不按它分组?
编辑:这就是我想要实现的目标
|名字 |姓氏 |舞台 |总数
|约翰 |史密斯 |第一 | 2
|约翰 |史密斯 |第三| 2
|亚历克斯 |史密斯 |第一 | 2
|简 |史密斯 |第三| 2
|简 |史密斯 |第一 | 2
|杰克 |史密斯 |第二 | 2
那么,在报告这些数据时:
John Smith 共有 4 条记录。 第一中有两个,第三中有两个
Alex Smith 共有 2 条记录。 第一
中的两个
简·史密斯共有 4 条记录。 第一中有两个,第三
中有两个
Jack Smith 总共有 2 条记录。 二分之二。
绘制这些数据时,我应该能够看到:
第一名:共 6 个。
第二次:共 2 次。
第三:共 4 个。
理想情况下,我还可以引入 CreatedDate 并开始收集随时间变化的数据报告:
每个阶段有多少副本。
每个人有多少重复项。
特定日期范围、事件等的重复次数。
【问题讨论】:
标签: sql sql-server