2013-04-14 22 views
3

我在SQL Server中有两个表,一个是PO RECEIPT表,另一个是Move Order表。在SQL Server中编写VIEW需要帮助

我需要写一个查询插入数据到Receipt表,它工作正常。收据编号在Receipt表中将是唯一的,因为它是主键和自动增量,例如对于Receipt编号1我收到2000个数量(它是一列)。

如果我想将500个移动到另一个移动,并且下一个500个移动到相同的收据编号。现在我想写一个VIEW,将Move Order表中的移动数量加起来组成Receipt Number,并将从Receipt表中的收到数量列中减去此数量。

目前我写的这个视图对于相同的Receipt Number工作正常,但是当我们在Move Order表中有不同的Receipt Number时,它会生成一个错误。该视图是

select distinct 
    [5_PO_RECEIPT_TABLE_DATABASE].[Part Number], 
    [5_PO_RECEIPT_TABLE_DATABASE].[Receipt Number], 
    (select sum([Move_Order].[Move Quantity]) 
    from [Move_Order] 
    group by [Move_Order].[Receipt Number]), 
    [5_PO_RECEIPT_TABLE_DATABASE].[Quantity Received] + [Move_Order].[Move Quantity] as TotalQuantity 
from 
    [5_PO_RECEIPT_TABLE_DATABASE] 
inner join 
    [Move_Order] on [5_PO_RECEIPT_TABLE_DATABASE].[Receipt Number] = [Move_Order].[Receipt Number] 

由上述观点产生的误差是

子查询返回大于1倍的值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。

回答

1

那么,错误是相当清楚的:你的子查询(在(select sum(..) from [Move_order]....返回多个值 - 如果你在列的列表SELECT使用它,你不能有一个子查询返回多个值...

最可能的是,你只是想在SUM([Move_Order].[Move Quantity])为一个Move_Order您目前看 - 所以你需要改变你的子查询中考虑到这一点:

SELECT DISTINCT 
    rcpt.[Part Number], 
    rcpt.[Receipt Number], 
    (SELECT SUM(m.[Move Quantity]) 
    FROM [Move_Order] m 
    WHERE m.[Receipt Number] = rcpt.[Receipt Number]), 
    rcpt.[Quantity Received] + mo.[Move Quantity] AS TotalQuantity 
FROM 
    [5_PO_RECEIPT_TABLE_DATABASE] rcpt 
INNER JOIN 
    [Move_Order] mo ON rcpt.[Receipt Number] = mo.[Receipt Number] 

我也用有意义的/不言自明表别名进行查询了很多更易读....

所以,现在,你的子查询将从[Move Order]表总结了所有的[Move Quantity]值当前正在处理一个[Receipt Number]

1

此外,在SQLServer2005的+,你可以使用选项与OVER()条款

SELECT DISTINCT 
     rcpt.[Part Number], 
     rcpt.[Receipt Number], 
     SUM(mo.[Move Quantity]) OVER(PARTITION BY rcpt.[Receipt Number]), 
     rcpt.[Quantity Received] + mo.[Move Quantity] AS TotalQuantity 
FROM [5_PO_RECEIPT_TABLE_DATABASE] rcpt 
    INNER JOIN [Move_Order] mo ON rcpt.[Receipt Number] = mo.[Receipt Number] 

顺便说一句,我认为DISTINCT关键字是在这种情况下,过度的,因为你在TotalQuantity列中的值是不同