SQL 服务器查看来自 4 个表的 combining/calculating 数据
SQL Server View combining/calculating data from 4 tables
我正在尝试计算发票的最高成本,但为了执行此操作,我需要合并 4 个表中的数据并求和。我更喜欢使用 UDF 的解决方案,而不是扩展下面的视图,因为它可能变得太大而无法管理。
数据库如下所示:
表 Product
和 Accessory
包含我需要求和的费用:
(Product.Rentcost) (Accessory.Rentcost)
表 RentedProduct
和 RentedAccessory
包含我需要确定哪个发票成本最高的发票编号。
(RentedProduct.Rentcost) (RentedAccessory.Rentcost)
到目前为止,我只能使用此视图在 Product
和 RentedProduct
上使用联接从 Product 获得我想要的结果:
CREATE VIEW Profit
AS
SELECT TOP 1
RentedProduct.InvoiceNr,
SUM(Product.Rentcost) AS Cost
FROM
RentedProduct
JOIN
Product ON Product.ProductNr = RentedProduct.ProductNr
GROUP BY
RentedProduct.InvoiceNr
ORDER BY
Cost DESC
您可以创建一个 table-valued 函数,如下所示:
CREATE FUNCTION dbo.tvfn_TopInvoices(
@Top INT
)
RETURNS TABLE
AS
RETURN
SELECT TOP (@Top)
InvoiceNr
,Cost
FROM (
SELECT
RentedProduct.InvoiceNr
,SUM(Product.Rentcost) AS Cost
FROM RentedProduct
JOIN Product
ON Product.ProductNr=RentedProduct.ProductNr
GROUP BY RentedProduct.InvoiceNr
UNION ALL
SELECT
RentedAccessory.InvoiceNr
,SUM(Accessory.Rentcost) AS Cost
FROM RentedAccessory
JOIN Accessory
ON Accessory.AccessoryNr=RentedAccessory.AccessoryNr
GROUP BY RentedAccessory.InvoiceNr
) p
ORDER BY Cost DESC
GO
然后您可以像这样使用此函数:
SELECT InvoiceNr
,Cost
FROM dbo.tvfn_TopInvoices(1)
我正在尝试计算发票的最高成本,但为了执行此操作,我需要合并 4 个表中的数据并求和。我更喜欢使用 UDF 的解决方案,而不是扩展下面的视图,因为它可能变得太大而无法管理。
数据库如下所示:
表 Product
和 Accessory
包含我需要求和的费用:
(Product.Rentcost) (Accessory.Rentcost)
表 RentedProduct
和 RentedAccessory
包含我需要确定哪个发票成本最高的发票编号。
(RentedProduct.Rentcost) (RentedAccessory.Rentcost)
到目前为止,我只能使用此视图在 Product
和 RentedProduct
上使用联接从 Product 获得我想要的结果:
CREATE VIEW Profit
AS
SELECT TOP 1
RentedProduct.InvoiceNr,
SUM(Product.Rentcost) AS Cost
FROM
RentedProduct
JOIN
Product ON Product.ProductNr = RentedProduct.ProductNr
GROUP BY
RentedProduct.InvoiceNr
ORDER BY
Cost DESC
您可以创建一个 table-valued 函数,如下所示:
CREATE FUNCTION dbo.tvfn_TopInvoices(
@Top INT
)
RETURNS TABLE
AS
RETURN
SELECT TOP (@Top)
InvoiceNr
,Cost
FROM (
SELECT
RentedProduct.InvoiceNr
,SUM(Product.Rentcost) AS Cost
FROM RentedProduct
JOIN Product
ON Product.ProductNr=RentedProduct.ProductNr
GROUP BY RentedProduct.InvoiceNr
UNION ALL
SELECT
RentedAccessory.InvoiceNr
,SUM(Accessory.Rentcost) AS Cost
FROM RentedAccessory
JOIN Accessory
ON Accessory.AccessoryNr=RentedAccessory.AccessoryNr
GROUP BY RentedAccessory.InvoiceNr
) p
ORDER BY Cost DESC
GO
然后您可以像这样使用此函数:
SELECT InvoiceNr
,Cost
FROM dbo.tvfn_TopInvoices(1)