如何在sql查询中按分组分隔行

如何在sql查询中按分组分隔行,sql,vb.net,ms-access,ms-access-2007,Sql,Vb.net,Ms Access,Ms Access 2007,我一直在做下面的查询。我确实使用VB.NET2010,DB是MsAccess 2007 SELECT sale_details.invoiceno AS sale_details_invoiceno, sale_details.product_code, sale_details.qty, sale_details.totalkg, sale_details.Rate, sale_details.subtotal, sale_head.invoice

我一直在做下面的查询。我确实使用VB.NET2010,DB是MsAccess 2007

SELECT 
    sale_details.invoiceno AS sale_details_invoiceno, 
    sale_details.product_code,
    sale_details.qty, sale_details.totalkg, sale_details.Rate, sale_details.subtotal,     
    sale_head.invoiceno AS sale_head_invoiceno, sale_head.suppliername, sale_head.invoicedate
FROM 
    sale_head 
INNER JOIN 
    sale_details ON sale_head.[invoiceno] = sale_details.[invoiceno]
WHERE 
    (((sale_head.suppliername)='Ramkrishna Creation'));
显示结果如下:

sale_details_invoice|product_code|qty |totalkg|Rate |Subtotal|Sale_head_invoice|suppliername          |invoicedate

5026                | M 1010     | 10 | 2.5   | 270 |   675  |5026             |Ramkrishna Creation   | 18/07/2014
5026                | CHIKU      | 100| 25    | 500 |  12500 |5026             |Ramkrishna Creation   | 18/07/2014
5026                | F PINK     | 50 | 12.5  | 500 |  6250  |5026             |Ramkrishna Creation   | 18/07/2014
4002                | LJ 16      | 80 | 12    | 350 |  4200  |4002             |Ramkrishna Creation   | 10/08/2014
4002                | BCH 950    | 50 | 12.5  | 150 |  1875  |4002             |Ramkrishna Creation   | 10/08/2014
3598                | L COPPER   | 150| 37.5  | 500 |  18750 |3598             |Ramkrishna Creation   | 10/08/2014
3598                | BCH 950    | 50 | 12.5  | 150 |  1875  |3598             |Ramkrishna Creation   | 10/08/2014
3598                | CHIKU      | 100| 25    | 500 |  12500 |3598             |Ramkrishna Creation   | 18/07/2014
我想打断并显示发票号的总数。在SQL或VB.NET DataGrid控件中是否有任何方法显示如下结果

sale_details_invoice|product_code|qty |totalkg|Rate |Subtotal|Sale_head_invoice|suppliername          |invoicedate

5026                | M 1010     | 10 | 2.5   | 270 |   675  |5026             |Ramkrishna Creation   | 18/07/2014
5026                | CHIKU      | 100| 25    | 500 |  12500 |5026             |Ramkrishna Creation   | 18/07/2014
5026                | F PINK     | 50 | 12.5  | 500 |  6250  |5026             |Ramkrishna Creation   | 18/07/2014
TOTAL                                                  19425

4002                | LJ 16      | 80 | 12    | 350 |  4200  |4002             |Ramkrishna Creation   | 10/08/2014
4002                | BCH 950    | 50 | 12.5  | 150 |  1875  |4002             |Ramkrishna Creation   | 10/08/2014
TOTAL                                                  6075

3598                | L COPPER   | 150| 37.5  | 500 |  18750 |3598             |Ramkrishna Creation   | 10/08/2014
3598                | BCH 950    | 50 | 12.5  | 150 |  1875  |3598             |Ramkrishna Creation   | 10/08/2014
3598                | CHIKU      | 100| 25    | 500 |  12500 |3598             |Ramkrishna Creation   | 18/07/2014
TOTAL                                                  33125

有没有办法通过SQL或VB.NET DataGrid控件解决此问题?。我一直在寻找解决方案,但我还没有得到它,请大家如果知道,一定要让我知道你可以在VB中循环计算你的数据,或者让SQL选择总数。对于后者,您需要再次查询相同的数据:

SELECT 
  sd.invoiceno AS sale_details_invoiceno, 
  sd.product_code,
  sd.qty, 
  sd.totalkg, 
  sd.Rate, 
  sd.subtotal,     
  sh.invoiceno AS sale_head_invoiceno, 
  sh.suppliername, 
  sh.invoicedate
FROM sale_head sh
INNER JOIN sale_details sd ON sh.invoiceno = sd.invoiceno
WHERE sh.suppliername = 'Ramkrishna Creation'
UNION ALL
SELECT 
  sd.invoiceno,
  'TOTAL',
  null, 
  null, 
  null, 
  SUM(sd.subtotal),     
  null, 
  null, 
  null
FROM sale_head sh
INNER JOIN sale_details sd ON sh.invoiceno = sd.invoiceno
WHERE sh.suppliername = 'Ramkrishna Creation'
GROUP BY sd.invoiceno 
ORDER BY sale_details_invoiceno, IIF(product_code = 'TOTAL', 1, 0);

请使用groupby发票id…您能填写完整的查询吗?请在where子句之后添加以下内容:groupby sale_details.invoiceno这将返回所有发票,并返回相同的编号只需另一个问题是:TOTAL显示发票的顶部Now,是否有任何方法显示发票编号已更改的发票底部?这将消除我所有的疑虑。另外,当我执行上述查询时,我得到一个错误,即-ORDER BY表达式IIFproduct_code='TOTAL',1,0包含查询未选择的字段。只有第一次查询中请求的字段才能包含在ORDER BY Expression中这很奇怪。我通常不使用MS Access,所以我只能猜测。UNION ALL的工作方式应该是执行第一个查询并添加第二个查询的结果。因此,列名应该来自第一个查询。例如,产品代码。可能Access出于某些原因对其进行了不同的命名,例如sd_product_code或product_code_1或其他任何原因。因此,尝试使用别名,甚至可能在两个查询中都使用:sd.product_代码作为product_代码,“TOTAL”作为product_代码,。这应该正确命名列,标题也应该正确。至于只有两个发票记录:您是说第一次查询的结果与原始查询的结果不同吗?我所做的只是接受您的查询并使用别名以提高可读性。这不应导致不同的结果。请再次检查。但当invoceno发生更改时,是否有任何方法可以在末尾显示invoceno的总计?现在总计显示在invoceno的顶部。看来我离得太近了,只需要稍作改动。如果你知道的话,请帮忙。