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

标签 sql sql-server view

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

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

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

目前我写的这个 View 对于相同的 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]

上述 View 产生的错误是

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

最佳答案

嗯,错误很明显:您的子查询((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] 当前正在处理。

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

相关文章:

sql - Azure 开发运营 : Continuous deployment for sql script

mysql - 在sql查询中复制行

c# - 更新 Entity Framework 6 中的多对多导航属性,更改未保存

asp.net - 如何开发、测试、版本、同步SQL Server 2000、2005、2008、2008R2数据库?

android - 从 View 中获取上下文是安全的

android - 添加要拖动的 float View

SQLite changes() 计算未更改的更新

sql - 所有(用户定义的标量)函数及其依赖项的列表

FireMonkey 的 HTML 查看器

MySQL语句获取最大ID的最小值