3

SQL Server に 2 つのテーブルがあります。1 つはPO RECEIPTテーブルと呼ばれ、もう 1 つはMove Orderテーブルです。

Receipt正常に機能しているテーブルにデータを挿入するクエリを作成する必要があります。領収書番号Receiptは、主キーであり自動インクリメントであるため、テーブル内で一意になります。たとえば、Receipt番号 1 の場合、2000 個の数量を受け取りました (列です)。

移動に 500 を移動し、次回は同じ領収書番号で別の 500 を移動する場合。Move Orderここで、グループ化されたテーブルの移動量を合計し、テーブルReceipt Numberの受信量列からこの量を差し引く VIEW を書きたいと思い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]

上記のビューで生成されたエラーは

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

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]

ところで、TotalQuantity 列の値が異なるため、この場合 DISTINCT キーワードは過剰だと思います

于 2013-04-14T09:26:07.777 に答える