繁体   English   中英

在SQL Server中编写VIEW时需要帮助

[英]Need Help in Writing VIEW in SQL Server

我在SQL Server中有2个表,一个叫做PO RECEIPT表,另一个是Move Order表。

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

如果我想将500移动到移动,而下一次移动500移动相同的收据编号。 现在我想编写一个VIEW,它将按Receipt Number分组的Move Order表中添加移动数量,并将从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。 当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做。

好吧,错误很明显:你的子查询( (select sum(..) from [Move_order]....返回多个值 - 如果在SELECT列表中使用它,则不能让子查询返回多个值...

最有可能的是,您只想要查看当前正在查看的一个Move_OrderSUM([Move_Order].[Move Quantity]) - 因此您需要更改子查询以将其考虑在内:

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]表中当前正在处理的那个[Receipt Number]所有[Move Quantity]值。

同样在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列中的值不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM