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

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

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

目前我写的这个 View 对于相同的 Receipt Number 工作正常,但是当我们在 Receipt Number 表中有不同的 Move 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]

上述 View 产生的错误是

最佳答案

好吧,错误很明显:您的子查询((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] 值。

关于sql - 在 SQL Server 中编写 VIEW 需要帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15996565/

10-12 15:18