2011-12-01 1 views
0

이것은 지불금 문제를 해결하는 내 질문의 일부입니다. 이것은 4 번째이며 희망적인 마지막 것입니다.두 열에 따라 그룹화했지만 테이블에서 더 많은 데이터를 보여줍니다. - 지불 문제

고객 표가 있으며 약 10 개의 필드 만 가져옵니다. 문제는 중복 된 것이 포함되어 있다는 것입니다. 전체 행이 복제되지는 않지만 레코드를 식별하는 두 개의 필드에는 중복이 포함됩니다 (단 몇 개만 포함). 이 두 분야입니다

  1. ACCOUNT_NUMBER
  2. 공급
  3. 내 테스트 테이블 없음 1, 2를 차지하지 않고는 같은 때문에 3 중복되어이

    id account_no supplier customer_name  meter_no StartDate EndDate  EnrollDate active  account_type usage* repid 
    --- ----------- ---------- -------------------- --------- ------------ ------------- ------------- ----------- ------------ -------- ------ 
    1 1000  MOBIL  photo company  345  11/01/2011 12/01/2011 09/01/2011 active  cat2   2000  100 
    2 1000  MOBIL  photo company  145  11/05/2011 12/04/2011 09/15/2011 active  cat3   2000  100 
    3 1000  MOBIL  photo company  645  11/05/2010 12/04/2010 08/25/2010 inactive cat2   1000  100 
    4 1001  HESS  Adventure company 485  11/01/2011 12/01/2011 09/01/2011 active  cat2   1500  200 
    5 1002  SHELL  School company  678  11/05/2011 12/04/2011 09/15/2011 active  cat2   3000  100 
    6 1003  BP   Hospital company  595  11/05/2010 12/04/2010 08/25/2010 inactive cat2   5000  300 
    

    주처럼 보이는

Account_no 및 Supplier. 그러나 다른 분야는 다르다. 그것은 진정한 의미에서 중복되지 않는다는 것을 의미한다. 예를 들어이 세 가지 모두가 서로 다른 meter_number로 간주됩니다.

각 레코드는 담당자 (마지막 열)에 할당됩니다. 담당자는 외부에서 오는 다른 테이블과이 테이블을 결합하여 지불됩니다. Account_no 및 Supplier라는 두 개의 열에 만 기반하여 일치시킵니다. 일치하는 경우 우리는 선을, 우리에게는 당신을 위해 돈이 있고 담당자는 돈을 받는다. 여기서 문제는 내가 테이블에 가입했을 때 동일한 account_no를 볼 수 있고 공급 업체가 일부 레코드에 대해 두 번 나타납니다. 그 사람들은 제거해야합니다.

그래서 실제로 어떤 문제가 있습니까? 리포트가 끝나면 account_no 및 Supplier 이외의 데이터도 인쇄하려고합니다. 이 데이터에는 customer_name, start_date, end_date, usage 등이 포함됩니다. 모든 열에 따라 그룹화하면 단순히 중복을 제거하지 않습니다. 내가하고 싶은 일은 두 개의 열로 그룹화하고 다른 데이터도 보여줍니다. 일반적인 출력은 다음과 같습니다.

id account_no supplier customer_name  meter_no StartDate EndDate  EnrollDate active  account_type usage* repid 
--- ----------- ---------- -------------------- --------- ------------ ------------- ------------- ----------- ------------ -------- ------ 
1 1000  MOBIL  photo company  345  *   *    *    *   *   4000  100 
4 1001  HESS  Adventure company 485  11/01/2011 12/01/2011 09/01/2011 active  cat2   1500  200 
5 1002  SHELL  School company  678  11/05/2011 12/04/2011 09/15/2011 active  cat2   3000  100 
6 1003  BP   Hospital company  595  11/05/2010 12/04/2010 08/25/2010 inactive cat2   5000  300 

위 표는 실제로 내보기입니다. 그것은 모든 duplicate account_no와 supplier를 제거 할 것입니다.하지만 그 값이 그 그룹에서 같지 않다면 다른 필드는 어떻게됩니까? 나는 하나의 가치 또는 다른 괜찮습니다. 여기에는 엄격한 기준이 없습니다. 왜냐하면 이러한 복제는 방법이 거의 없을 것이기 때문입니다. 즉 * 어떤 데이터라도 괜찮지 만 한 레코드 또는 다른 레코드 또는 두 레코드의 합에 속해야합니다.

이 테이블을 만드는 방법은 위의 테이블에 추가 열을 추가하고 해당 그룹에서 발견 된 레코드 수를 나열하는 것입니다.

질문이 있으시면 언제든지 문의하십시오. 중요한 열은 사용법이며, 그룹의 사용법에 대한 합계를보고 싶습니다. 그러나 그렇지 않으면 그룹의 최고 가치도 괜찮습니다.

SQL 쿼리에서이 작업을 수행 할 수 있는지 확실하지 않습니다. 아마도 방법이있을 것입니다.

+0

나는이 문제를 이해하지 못한다. 문제는 데이터 중복 문제가 아니므로 중복 된 모든 레코드를 제거하거나 중복으로 간주 할 수있다. 그런 다음 이러한 중복을 RS 측에서 처리합니다 (보고 서비스). 'account no.'와'supplier' 헤더 타입 그룹을 만들어서 한 번 나타나게하고'r_s '의 상세 행을 사용하여'meter_no','StartDate' 등 나머지 데이터를 보여줍니다. 들여 쓰기 된 보고서가 있습니다. 아주 간단합니다. 두 개의 열 그룹을 추가하면 나머지는 그대로 유지됩니다. – JonH

+0

현재 동일한 쿼리에 대해 사용중인 쿼리를 표시 할 수 있습니까? – reggie

+0

@JonH 대단한 의견 이네요. 제 출력물은 Excel에 있습니다. 레코드는 행 단위입니다. 자세히보기가 없습니다. 귀하의 접근 방식은 Crystal Reports의 기능과 유사하지만 SQL을 사용하고 있으며 세부적인보기를 수행하는 방법을 모릅니다. –

답변

0

하나의 값 또는 다른 값을 사용하여 그룹별로 선택시 Min() 또는 Max() 함수를 사용할 수 있으면 하나 또는 둘 다를 얻을 수 있습니다.

select a, b, min(y), max(z) from table group by a, b 
+0

하지만 db 서버 쪽에서이 작업을 수행 할 필요는 없습니다.이 문제는 프레젠테이션 문제보다 더 중요합니다. – JonH

+0

이 문제는 해결되었지만 이상적으로는 " 그룹화 "필드를 사용하여 각 그룹의 개별 레코드를 볼 수 있습니다. –