2011-07-05 5 views
0

SQL Server 2005에서 중복을 피하십시오?

select distinct PayID, PaymentDate, AccountNumber, sum(PaymentAmount) as Amount 
from tblInvoicePaymentDetails 
where CustomerID = 'mud4978' 
group by PayID, PaymentDate, AccountNumber 

출력 :

PayID PayDate     Account  Amount 
1  2011-07-05 11:09:14.390 NULL  700.00 
1  2011-07-05 11:09:14.407 NULL  100.00 
2  2011-07-05 11:20:05.517 NULL  0.00 
2  2011-07-05 11:20:05.547 9000  500.00 
2  2011-07-05 11:20:07.000 9000  100.00 
3  2011-07-05 12:19:22.017 100000  200.00 
3  2011-07-05 12:19:22.077 100000  100.00 

그러나 내 요구 사항은 다음과 같이 총 3 개의 레코드를 표시합니다 (중복을 피하십시오) 및 총계입니다.

payid   paydate    account  amount 
1   2011-07-05 11:09:14 null   800.00 
2   2011-07-05 11:20:05 9000   600.00 
3   2011-07-05 12:19:22 100000  300.00 

제발 도와주세요

+2

현재 11 개의 질문을했으며 그 중 0 개에 대한 대답을 수락했습니다. 돌아가서 당신을 도운 대답을 받아들이면 당신이 정중 할 것입니다. –

답변

0

Pay로 그룹화하려는 것 같습니다. ID (그렇지 않으면 다른 열이 고려됩니다).

PayDate가 다양하므로 값 중 하나를 원하면 정확한 PayDate를 출력해야합니다. Max 또는 Min을 고려하여 이미 존재하는 것을 골라 낼 수 있습니다.

SELECT DISTINCT 
    PayID, 
    MIN(PaymentDate) AS PaymentDate, 
    MAX(AccountNumber) as AccountNumber, 
    SUM(PaymentAmount) as Amount 
FROM tblInvoicePaymentDetails 
WHERE CustomerID='mud4978' 
GROUP BY PayID 
0

문제는 paydate 열이 다른 포함됩니다 :

계좌는 또한 다시는

귀하의 질의는 다음과 같이 보일 것이다 최소 또는 최대

같은 것을 사용하여 하나를 선택해야 달라집니다 값. 그룹화 된 값에 대해 동일한 날짜를 모두 나타내도록 내부 값을 정규화해야합니다. 원하지 않을 수도있는 각 행을 업데이트하여이 작업을 수행 할 수 있습니다.

날짜가 포함 된 다른 행을 추가 할 수 있습니다 (이 경우 시간 값은 항상 00:00:00이어야합니다).

세 번째 방법은 표준화 된 날짜 값을 포함하는 하위 쿼리를 만드는 것입니다. 아래 예를보고이를 수행하는 방법을 알아낼 수 있습니다. 테이블 변수를 select 문과 컬럼 이름으로 바꾸십시오.

DECLARE @x TABLE (
amount int, 
dt DateTime) 

INSERT INTO @x (amount, dt) VALUES (1, '01.01.2005 12:00:12') 
INSERT INTO @x (amount, dt) VALUES (2, '01.01.2005 10:00:12') 
INSERT INTO @x (amount, dt) VALUES (2, '01.02.2005 10:00:12') 

SELECT SUM(a), b FROM 
    (
     SELECT 
      amount AS a, 
      DATEADD(dd, 0, DATEDIFF(dd, 0, dt)) AS b 
     FROM 
      #x 
    ) subtable 
GROUP BY b 
관련 문제