[英]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_Order
的SUM([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.