我在 MS Access 中有一个交叉表查询,在将我的后端迁移到 SQL Server 2017 后运行速度非常慢。所以我想在 SQL 中创建一个执行相同聚合的视图。
MS 访问查询:
TRANSFORM Sum([Auftrag Positionen].Gesamtpreis) AS SummevonGesamtpreis
SELECT Format$([Stammdaten Datum].[Datum],'yyyy\/mm mmmm') AS Monat, Sum([Auftrag Positionen].Gesamtpreis) AS Gesamt
FROM [Stammdaten Datum] LEFT JOIN (Auftrag LEFT JOIN ([Stammdaten Statistik] RIGHT JOIN [Auftrag Positionen] ON [Stammdaten Statistik].Kennzeichen = [Auftrag Positionen].Statistik) ON Auftrag.[Auftrags-Nummer] = [Auftrag Positionen].[Auftrags-Nummer]) ON [Stammdaten Datum].Datum = Auftrag.Auftragseingang
WHERE (((Auftrag.[Auftrag-Angebot])="Auftrag"))
GROUP BY Format$([Stammdaten Datum].[Datum],'yyyy\/mm mmmm')
ORDER BY Format$([Stammdaten Datum].[Datum],'yyyy\/mm mmmm') DESC
PIVOT [Stammdaten Statistik].Beschreibung;
我知道我可以取消访问日期格式:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, [Stammdaten Datum].[Datum]), 0) AS Monat, Sum([Auftrag Positionen].Gesamtpreis) AS Gesamt
FROM [ROBI_1].[dbo].[Stammdaten Datum] LEFT JOIN ([ROBI_1].[dbo].Auftrag LEFT JOIN (ROBI_1.dbo.[Stammdaten Statistik] RIGHT JOIN ROBI_1.dbo.[Auftrag Positionen] ON [Stammdaten Statistik].Kennzeichen = [Auftrag Positionen].Statistik) ON Auftrag.[Auftrags-Nummer] = [Auftrag Positionen].[Auftrags-Nummer]) ON [ROBI_1].[dbo].[Stammdaten Datum].Datum = Auftrag.Auftragseingang
WHERE ((([Auftrag].[Auftrag-Angebot])='Auftrag'))
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, [Stammdaten Datum].[Datum]), 0)
ORDER BY DATEADD(MONTH, DATEDIFF(MONTH, 0, [Stammdaten Datum].[Datum]), 0) DESC
但我不知道如何进行数据透视聚合,我尝试过的一切都给了我语法错误。 (我确实是 SQL/T-SQL 的菜鸟)。 感谢您的帮助!
答案 0 :(得分:0)
我想应该是这样的:
;WITH MonatGesamt AS
(
SELECT
Monat = DATEPART(MONTH, SD.Datum)
, Gesamtpreis = ISNULL(AP.Gesamtpreis, 0)
FROM ROBI_1.dbo.[Stammdaten Datum] SD
LEFT JOIN ROBI_1.dbo.Auftrag AT ON AT.Auftragseingang = SD.Datum
LEFT JOIN ROBI_1.dbo.[Auftrag Positionen] AP ON AP.[Auftrags-Nummer] = AT.[Auftrags-Nummer]
WHERE AT.[Auftrag-Angebot] = 'Auftrag'
)
SELECT
Monat
, Gesamt = SUM(Gesamtpreis)
FROM MonatGesamt
GROUP BY Monat
ORDER BY Monat DESC