Предположим, у меня есть представление, которое сворачивает данные с помощью предложения GROUP BY
:
CREATE VIEW InvoiceAmountsByCustomer AS
SELECT
Customer.CustomerID,
SUM(Invoice.TotalAmount) AS TotalInvoiceAmount
FROM
Customer LEFT OUTER JOIN Invoice ON Customer.CustomerID = Invoice.CustomerID
GROUP BY Customer.CustomerID
Теперь предположим, что я хочу, чтобы представление ограничивало, какие счета включаются в итоги на основе диапазона дат.Чтобы проиллюстрировать (притворяясь, что {From Date}
и {To Date}
содержат диапазон дат):
CREATE VIEW InvoiceAmountsByCustomer AS
SELECT
Customer.CustomerID,
SUM(Invoice.TotalAmount) AS TotalInvoiceAmount
FROM
Customer LEFT OUTER JOIN Invoice ON Customer.CustomerID = Invoice.CustomerID
WHERE
Invoice.Date BETWEEN {From Date} AND {To Date}
GROUP BY Customer.CustomerID
Чем я могу заменить {From Date}
и {To Date}
, чтобы я мог передавать их значения (прямо или косвенно)к мнению?Например, возможно ли связать эти значения с текущим сеансом?
CREATE VIEW InvoiceAmountsByCustomer AS
SELECT
Customer.CustomerID,
SUM(Invoice.TotalAmount) AS TotalInvoiceAmount
FROM
Customer LEFT OUTER JOIN Invoice ON Customer.CustomerID = Invoice.CustomerID
WHERE
Invoice.Date BETWEEN GetUserDefinedSessionValue('From Date') AND GetUserDefinedSessionValue('To Date')
GROUP BY Customer.CustomerID
, где GetUserDefinedSessionValue
- мнимая функция, которая возвращает значения, связанные с текущим сеансом.Другая воображаемая функция, SetUserDefinedSessionValue
, будет вызвана клиентом перед запросом представления:
SetUserDefinedSessionValue('From Date', ...)
SetUserDefinedSessionValue('To Date', ...)
SELECT * FROM InvoiceAmountsByCustomer
Мой воображаемый пример предназначен только для иллюстрации того, как я предполагаю, что эти значения передаются в представление.
Примечание: Это тривиальный пример, и реальная ситуация намного сложнее, мешая мне выполнить GROUP BY
запрос непосредственно клиентом.