我有一個多對多關系的表,我需要在不修改架構的情況下進行 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)。
我需要在報告表中創建一個重復的行。但是,我在弄清楚如何將計數轉換為連接時遇到了麻煩(因為我不想使用游標)。
這是我的查詢:
INSERT INTO Reports (Description)
SELECT Description
FROM Reports
WHERE ReportId IN (SELECT [ReportID]
FROM [ScheduledReports]
GROUP BY ReportId
HAVING COUNT(*) > 1)
如何將 ReportRow 自身加入 Count(*) -1 次?
uj5u.com熱心網友回復:
下面的查詢應該為您提供每個唯一報告的計劃順序。然后,您可以使用sequencing > 1來確定需要將哪些值插入到您的報告表中。這個選擇的輸出可能應該被快取,因為它會
- 通過當前 ID 指示需要將哪些行添加到您的報告中
- 可用于稍后更新日程表中參考的 ReportID
SELECT *
FROM (
SELECT Reports.Id
,ScheduledReportId
,ROW_NUMBER() OVER (
PARTITION BY ReportId
ORDER BY ScheduledReportId
) AS [Sequencing]
FROM Reports
INNER JOIN ScheduledReports on ScheduledReports.ReportId = Reports.Id
WHERE ReportId IN (SELECT [ReportID]
FROM [ScheduledReports]
GROUP BY ReportId
HAVING COUNT(*) > 1)) AS SequencedReportAndSchedules
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/333982.html
上一篇:如何訪問PandasDataFrame中的標稱值和不確定性?
下一篇:基于浮動的網格系統在視口外渲染
