3

変数\パラメーターをビューに渡して、日付範囲でフィルター処理したいと思います。ビューでグループ化を行っているため、ビューの外部にwhere句を配置することはできません。

私はこれに関するたくさんの投稿を読みましたが、まだそれを機能させることができていません。私がビューにパラメーターを渡すのを見たほとんどの回避策は、値を返すために関数を使用することを含み、これは私が行き詰まっているところです。

/* My current view that I want to pass in start and end dates */
CREATE VIEW Total_Sales_By_Product_Num AS
SELECT products_all_fields.*,
    Sum(<a bunch of code removed for this sample>) AS Item_Qty_Requested_Total, 
    Sum(<a bunch of code removed for this sample>) AS Item_Qty_Accepted_Total,  
    Sum(<a bunch of code removed for this sample>) AS Total_Sales_Dollars
FROM products_all_fields
    LEFT OUTER JOIN (web_orders_items
        INNER JOIN web_orders_header
            ON  web_orders_items.Web_Order_Num = web_orders_header.Web_Order_Num )
        ON  products_all_fields.Product_Num = web_orders_items.Product_Num
WHERE web_orders_header.Order_Date BETWEEN fn_GetStartDate() AND fn_GetEndDate()
GROUP BY products_all_fields.Product_Num
ORDER BY products_all_fields.Description

パラメータをビューに返す関数:

CREATE FUNCTION fn_GetStartDate ()
    RETURNS DATE
    DETERMINISTIC NO SQL
BEGIN
    RETURN @StartDate;
END

CREATE FUNCTION fn_GetEndDate ()
    RETURNS DATE
    DETERMINISTIC NO SQL
BEGIN
    RETURN @EndDate;
END

これは機能しません、データを返しません、私は愚かなことをしていることを知っています

set @fn_StartDate := '2012-01-01';
set @fn_EndDate := '2012-02-01';
select * from Total_Sales_By_Product_Num

助けてくれてありがとう!

4

3 に答える 3

3

ああ!!! 私はそれを機能させました、私はばかみたいに感じます、しかし私は日付の私の割り当ての1つに一重引用符ではなく二重引用符を持っていました。今はうまくいくようです。これを行う方法を探している将来の人々のために、この投稿を残しておきます。

于 2013-01-24T22:23:03.947 に答える
1

以下のように動作するはずです。

set @StartDate := '2012-01-01';
set @EndDate := '2012-02-01';
select * from Total_Sales_By_Product_Num;
于 2019-07-17T13:28:17.170 に答える
0

あなたが必要です

SET @fn_StartDate = fn_GetStartDate('2012-01-01')

@fn_EndDateと同じ

そしてあなたの見解では

WHERE web_orders_header.Order_Date BETWEEN @fn_StartDate.....

ただし、これは関数の呼び出し方法の構文にすぎません。あなたはまだパラメータをビューに渡そうとしていますが、私が知る限り、これは不可能です。代わりに、すべてのビューロジックを関数に入れてみてください。

于 2013-01-24T22:18:25.990 に答える