2014-09-01 3 views
0

다음과 같이 쿼리를 작성했습니다. (내가 VB.NET 2010을 사용 할 및 DB가 MS Access에 2007입니다)SQL 쿼리에서 행을 구분하는 방법

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 

내가 헤어지고 싶어 및 송장의 디스플레이 TOTAL 없음. 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 컨트롤로이 문제를 해결할 수있는 방법이 있습니까? 나는 해결책을 찾고 있지만 아직 이해하지 못했다. 알고 계시다면 알려주세요.

+0

는 GROUPBY 송장 ID를 사용 ... – Codexer

+0

당신은 전체 쿼리를 작성 주실 래요? –

+0

다음을 추가하십시오 : 귀하의 where 절 뒤에 GroupBy sale_details.invoiceno – Codexer

답변

0

VB에서 루프로 데이터를 계산하거나 SQL에서 총계를 선택할 수 있습니다. 후자의 경우 다시 동일한 데이터를 조회 할 수 hvae됩니다

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); 
+0

Excellent !!!!! –

+0

한 가지 더 많은 문제가 있습니다 : TOTAL은 invoiceno (행) 상단을 표시합니다. 인보이스 번호가 변경된 인보이스의 하단을 표시 할 수있는 방법이 있습니까? 이것은 내 모든 의심을 해결할 것입니다. 사전에 고마워요 –

+0

또한 쿼리 위의 excel 때 --- ORDER BY 식 (IIF (product_code = 'TOTAL', 1,0))에는 쿼리에서 선택하지 않은 필드가 포함되어 있습니다. 첫 번째 쿼리에서 요청한 필드 만 ORDER BY 식에 포함될 수 있습니다. –

관련 문제