【发布时间】:2021-12-09 03:51:11
【问题描述】:
我有一个具有多对多关系的表,我需要在不修改架构的情况下创建 1 对 1。这是伪代码:
Reports {
Id INT,
Description NVARCHAR(256),
ReportFields...
}
ScheduledReports {
ScheduledReportId INT
ReportId INT (FK)
Frequency INT
}
当我运行这个查询时:
SELECT [ReportID], COUNT(*) as NumberOfReports
FROM [ScheduledReports]
GROUP BY ReportId
HAVING COUNT(*) > 1
我会返回所有重复报告的结果。
ReportId, NumberOfReports
1, 2
2, 4
Foreach 附加报告(例如 NumberOfReports -1)。
我需要在 Reports 表中创建一个重复的行。但是我在弄清楚如何将计数转换为连接时遇到了麻烦(因为我不想使用游标)。
这是我的查询:
INSERT INTO Reports (Description)
SELECT Description
FROM Reports
WHERE ReportId IN (SELECT [ReportID]
FROM [ScheduledReports]
GROUP BY ReportId
HAVING COUNT(*) > 1)
如何将 ReportRow 自身加入 Count(*) -1 次?
【问题讨论】:
标签: sql join cartesian-product