如何在sql查询中按分组分隔行
我一直在做下面的查询。我确实使用VB.NET2010,DB是MsAccess 2007如何在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
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的顶部。看来我离得太近了,只需要稍作改动。如果你知道的话,请帮忙。