0

C#asp.netのSQLデータベースの注文+注文ラインに買い物かごを書き込もうとしています。オーダーラインには、バスケット内のすべてのアイテムのオーダー番号、合計価格、製品ID、数量などが含まれます。注文自体には主キーとして注文番号が含まれ、それを介してさまざまな行にリンクされます。昨日はすべて正常に機能しましたが、insert intoステートメントでSELECTコマンドを使用してより動的に処理しようとすると、上記の構文エラーが発生します。

このステートメントの何が問題になっているのか誰かが知っていますか?

INSERT INTO [order] 
        (klant_id,totaalprijs,btw,subtotaal,verzendkosten)
SELECT  klant.id
,       SUM(orderregel.totaalprijs)
,       SUM(orderregel.btw)
,       SUM(orderregel.totaalprijs) - SUM(orderregel.btw)
,       7.50 
FROM    orderregel
INNER JOIN  
        klant 
ON      [order].klant_id = klant.id  
WHERE   klant.username = 'jerry' 
GROUP BY 
        id;

「order」テーブルの注文番号は自動番号にあり、後ろのaspコードには、すべての製品に書き込まれる行を処理するfor eachがあり、このループの外側に0に設定されたインデックスがあり、そのすべての終わりに1が付けられています。 。オーダーのexecutenonqueryは、最初のループの開始時に1回だけ実行され、その後にMAX(ordernumber)をオーダー番号として行が追加されます。

私は十分な情報を提供し、誰かが私を助けることができることを願っています。前もって感謝します!

編集:このクエリを使用して、みんなに感謝します!

INSERT INTO [order](klant_id、totaalprijs、btw、subtotaal、verzendkosten)SELECT(SELECT klant.id FROM klant WHERE klant.username ='jerry')、
SUM(orderregel.totaalprijs)、SUM(orderregel.btw)、
SUM( orderregel.totaalprijs)-SUM(orderregel.btw)、7.50 FROM
orderregel;

4

3 に答える 3

3

[order]JOIN で使用したことがあるorderregelと思います。

FROM    orderregel
    INNER JOIN klant ON [order].klant_id = klant.id 

次のようにする必要があります。

FROM    orderregel
    INNER JOIN klant ON orderregel.klant_id = klant.id 

編集:

なぜ使用しないのですか:

INSERT INTO [order] 
        (klant_id,totaalprijs,btw,subtotaal,verzendkosten)
SELECT  (SELECT klant.id FROM klant WHERE klant.username = 'jerry')
,       SUM(orderregel.totaalprijs)
,...

...そしてklantテーブルとのJOINを避けますか?

于 2012-06-23T21:11:13.810 に答える
1

挿入されているテーブルを参照することはできません。結局、挿入が完了する前に、これらの行はまだそこにありません!

klantクエリを読むと、呼び出されたを挿入しようとしていることは明らかですJerry。しかし、どのオーダーラインが挿入に使用されるかをどのように指定するのでしょうか?

考えられる解決策:

  1. klant IDを使用して、最初に注文を書き込みます
  2. 注文明細を作成します。最初のクエリから orderid を知っています (fe usingselect SCOPE_IDENTITY()
  3. 注文を合計で更新する
于 2012-06-23T21:12:18.687 に答える
0

これを試してください: INSERT INTO [注文] (klant_id,totaalprijs,btw,subtotaal,verzendkosten) SELECT klant.id , SUM(orderregel.totaalprijs) , SUM(orderregel.btw) , SUM(orderregel.totaalprijs) - SUM(orderregel.btw ) , 7.50 FROM orderregel INNER JOIN klant ON orderregel.id = klant.id
INNER JOIN [order] ON [order].klant_id = klant.id
WHERE klant.username = 'jerry' GROUP BY id;

于 2012-06-25T09:54:08.820 に答える