【发布时间】:2010-01-08 13:16:01
【问题描述】:
假设我有一个通过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 查询。
【问题讨论】:
标签: sql-server view arguments