0

我正在尝试将购物篮写入来自 C# asp.net 的 sql 数据库中的订单 + 订单行。订单行将包含购物篮中每件商品的订单编号、总价、产品编号、数量等。订单本身将包含订单号作为主键,并将通过它链接到不同的行。昨天一切正常,但是现在当我尝试在 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;

“订单”表中的订单号在自动编号上,在 asp 代码隐藏中,有一个 for each 用于处理为每个产品编写的行,在此循环之外在 0 上设置了一个索引,并且在它的每一端都增加了 1 . 订单的 executenonquery 仅在第一个循环开始时执行一次,并在后面添加行,以 MAX(ordernumber) 作为订单号。

我希望我提供了足够的信息,并且有人能够帮助我。提前致谢!

编辑:谢谢大家,使用这个查询做到了!

插入 [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

您已经在 J​​OIN 中使用过,我猜[order]应该是什么时候。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 表加入?

于 2012-06-23T21:11:13.810 回答
1

您不能引用要插入的表。毕竟,在插入完成之前这些行还不存在!

阅读您的查询,很明显您正在尝试插入被klant调用的Jerry. 但是您如何指定插入使用哪些订单行?

一个可能的解决方案:

  1. 先写下订单,加上klant id
  2. 创建订单行。您从第一个查询中知道 orderid(fe 使用select SCOPE_IDENTITY()
  3. 使用总计更新订单
于 2012-06-23T21:12:18.687 回答
0

试试这个: 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 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 回答