SQL Server表值函数问题

时间:2013-01-11 06:10:39

标签: sql sql-server sql-server-2012

刚刚得到另一个问题,我正在拉扯我留在这里的剩余头发。

我有4个表(ProductCustomersOrdersOrder Details)我需要创建一个将Country Name传递给函数的值表函数。我还需要函数将Customers表与我的Orders表连接起来。理想情况下,我希望按订单日期过滤国家/地区。因此,我希望能够从功能中选择,该功能可以告诉我某个国家/地区在特定日期范围内的订单。

到目前为止,我已经尝试了以下但没有取得多大成功:

USE sample;
GO
CREATE FUNCTION Orders_By_Country (@Country VARCHAR(50))
    RETURNS TABLE
    AS RETURN (SELECT Customers.Country, Customers.CompanyName
                    FROM Customers
                   WHERE Customers.Country = Orders.ShipCountry
                 AND Country = @Country);

我的Country表格中没有Orders列,所以也许这就是为什么它不起作用。不知道如何加入这两个。 OrdersCustomers分享CustomerID作为关系,但尝试也给了我一个错误。

有什么想法吗?我现在必须去睡觉了,但是我会在早上第一件事就检查一下。

由于

1 个答案:

答案 0 :(得分:1)

如果您想使用Orders表格做出决定,或者如果您想从TVF中的该表格中返回一列或多列,则需要加入! / p>

CREATE FUNCTION Orders_By_Country (@Country VARCHAR(50))
    RETURNS TABLE
    AS RETURN 
       (SELECT Customers.Country, Customers.CompanyName
        FROM Customers
        INNER JOIN Orders ON Orders.CustomerId = Customers.CustomerId
        WHERE 
            Customers.Country = Orders.ShipCountry
            AND Country = @Country);

或者您可能根本不需要它 - 看到Country表上有Customers列:

CREATE FUNCTION Orders_By_Country (@Country VARCHAR(50))
    RETURNS TABLE
    AS RETURN 
       (SELECT Customers.Country, Customers.CompanyName
        FROM Customers
        WHERE 
            Customers.Country = @Country);