3

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

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

如果我想将 500 移动到移动,下次再移动 500 以获得相同的收据编号。Move Order现在我想编写一个视图,它将在按分组的表中加起来移动数量,Receipt Number并从表中收到的数量列中减去这个数量Receipt

目前我编写了这个视图,它在相同的情况下工作正常,Receipt Number但是当我们Receipt NumberMove Order表中有不同时,它会产生错误。观点是

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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

4

2 回答 2

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 Quantity]值。[Move Order][Receipt Number]

于 2013-04-14T08:27:38.120 回答
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 列中的值不同

于 2013-04-14T09:26:07.777 回答