首页 > 解决方案 > SQL Server:按年份过滤

问题描述

CREATE PROCEDURE mittelwert3 
    @kID INT, @date DATE
AS
    SELECT 
        SUM(((Verkauf.MengePräsentkorb * Präsentkorb.Preis) + 
             (Verkauf.MengeArtikel * Artikel.Preis)) / 365) 
    FROM 
        Verkauf
    INNER JOIN 
        kunde ON kunde.KundeID = Verkauf.KundeID
    INNER JOIN 
        Artikelverkauf ON Artikelverkauf.BestellungID = Verkauf.kaufID
    INNER JOIN 
        Artikel ON Artikel.ArtikelID = Artikelverkauf.ArtikelID
    INNER JOIN 
        Präsentkorbverkauf ON Präsentkorbverkauf.BestellungID = Verkauf.kaufID
    INNER JOIN 
        Präsentkorb ON Präsentkorb.PräsentkorbID = Präsentkorbverkauf.PräsentkorbID
    WHERE 
        kunde.kundeID = @kID 
        AND verkauf.datum = '@date-%%-%%'

如何过滤日期年份?

因为我尝试过的不起作用(请参阅查询的最后一行)

乐玩

标签: sql-serverdatabasestored-procedures

解决方案


给出一个范围是最好的选择。这些计算将获得参数年份的第一天和下一年的第一天。零可以更改为任何值,但必须保持不变。

CREATE PROCEDURE mittelwert3 @kID int ,@date date
AS
SELECT SUM(((Verkauf.MengePräsentkorb*Präsentkorb.Preis)+ 
    (Verkauf.MengeArtikel*Artikel.Preis))/365) 
FROM Verkauf
INNER JOIN kunde ON kunde.KundeID = Verkauf.KundeID
INNER JOIN Artikelverkauf ON Artikelverkauf.BestellungID = Verkauf.kaufID
INNER JOIN Artikel ON Artikel.ArtikelID = Artikelverkauf.ArtikelID
INNER JOIN Präsentkorbverkauf ON Präsentkorbverkauf.BestellungID = Verkauf.kaufID
INNER JOIN Präsentkorb ON Präsentkorb.PräsentkorbID = Präsentkorbverkauf.PräsentkorbID
WHERE kunde.kundeID = @kID 
AND verkauf.datum >= DATEADD( YY, DATEDIFF( YY, 0, @date), 0)
AND verkauf.datum < DATEADD( YY, DATEDIFF( YY, 0, @date)+1, 0)

推荐阅读