2017-04-03 96 views
1

我正在创建一个从多个表中选择数据的查询。我已完成所有查询,但现在必须将WHERE子句应用于整个查询。 我有9选择语句,这些工作正常。数据正在从不同的表中选择。现在我想声明日期session,我希望根据提供的日期过滤所有数据。我使用下面的查询:如何将WHERE子句应用于SQL Server中的多个SELECT语句

SELECT 
    (SELECT COUNT(DISTINCT OrderItems.ProductID) 
    FROM OrderItems) AS 'TotalSoldItemsDistinct', 
    (SELECT COUNT(OrderItems.ProductID) 
    FROM OrderItems) AS 'TotalSoldItemsInDistinct', 
    (SELECT COUNT(Orders.OrderID) 
    FROM Orders) AS 'TotalOrders', 
    (SELECT COUNT(Orders.OrderID) 
    FROM Orders 
    WHERE Orders.OrderStatusID = @CompleteOStatusID) AS 'CompleteOrders', 
    (SELECT COUNT(Orders.OrderID) 
    FROM Orders 
    WHERE Orders.OrderStatusID = @PendingOStatusID) AS 'PendingOrders', 
    (SELECT COUNT(Orders.ClientID) 
    FROM Orders 
    WHERE Orders.ClientID != @WalkingCustID) AS 'namedcustomers', 
    (SELECT COUNT(Orders.ClientID) 
    FROM Orders 
    WHERE Orders.ClientID = @WalkingCustID) AS 'WalkingCustomers', 
    (SELECT SUM(OrderItems.PurchasePrice) 
    FROM OrderItems) AS 'TotalPurchasePrice', 
    (SELECT SUM(OrderItems.SalePrice) 
    FROM OrderItems) AS 'TotalSalePrice' 

我选择从2个表数据名为“Orders”和“OrderItems”,我有“订单”表和列OrderDateTransactionDateOrderItems表上,我想使用过滤器。任何人都可以建议如何应用过滤器到整个查询?

+0

还有比这里解决您的问题..你的查询可以更简化 – maSTAShuFu

+0

感谢回复更多。将ü请建议我该怎么做? –

+0

你将不得不寻找一个类似的情况下,或等到有人,因为我现在要回家:) – maSTAShuFu

回答

0

这并不完全清楚你想要什么结果,但在这里有两种方法。

  1. 尝试在同一时间选择从2个表数据下面(与标准替换日期):

    SELECT * FROM Orders AS o INNER JOIN OrderItems AS i WHERE o.TransactionDate = '2015-02-12' AND i.OrderDate = '2015-02-12';

SELECT *从两个表为选择所有列一个结果和WHERE ... AND ... - 条款筛选结果只有您定义的日期。

  1. 请尝试以下操作,以仅为与特定订单上的日期匹配的数据选择订单商品数据。

    SELECT i.* FROM Orders AS o INNER JOIN OrderItems AS i WHERE o.TransactionDate = i.OrderDate AND o.OrderID = '12345';

SELECT i.*告诉查询只返回的OrderItems的列。并且WHERE o.TransactionDate = i.OrderDate确保只返回OrderID为“12345”的订单的同一日期的订单项(这是用AND o.OrderID = '12345'定义的。因为您的订单表上有一个“OrderID”字段,所以这样做会起作用,并且您希望使用它作为一个标准。

1

你可以试试这个

;with tempOrderItems AS 
    ( 
     SELECT 
     COUNT(DISTINCT OrderItems.ProductID) AS 'TotalSoldItemsDistinct', 
     COUNT(OrderItems.ProductID) AS 'TotalSoldItemsInDistinct', 
     SUM(OrderItems.PurchasePrice) AS 'TotalPurchasePrice', 
     SUM(OrderItems.SalePrice) AS 'TotalSalePrice' 
     FROM OrderItems ori 
     WHERE OrderDate BETWEEN xxx AND yyy 
    ) 
, tempOrders AS 
    (
     SELECT 
     COUNT(o.OrderID) AS 'TotalOrders', 
     SUM(CASE WHEN o.OrderStatusID = @CompleteOStatusID THEN 1 ELSE 0 END) AS 'CompleteOrders', 
     SUM(CASE WHEN o.OrderStatusID = @PendingOStatusID THEN 1 ELSE 0 END) AS 'PendingOrders', 
     SUM(CASE WHEN o.ClientID != @WalkingCustID THEN 1 ELSE 0 END) AS 'namedcustomers', 
     SUM(CASE WHEN o.ClientID = @WalkingCustID THEN 1 ELSE 0 END) AS 'WalkingCustomers' 
     FROM Orders o 
     WHERE TransactionDate BETWEEN xxx AND yyy 

    ) 
SELECT * FROM tempOrderItems 
CROSS JOIN tempOrders