2012-12-31 5 views
1

SQL Server 데이터베이스에서 고유 한 행을 표시하려고합니다. UploadedDataDummyReportDetail이라는 두 개의 테이블이 있습니다. 그 테이블에 가입하고 싶지만 distinct를 사용하여 고유 한 행을 얻지는 않습니다.SQL 서버의 고유 한 행

SELECT DISTINCT 
    D.TokenNo, D.UploadDate AS "Date", D.[Time], 
    D.SMSContent AS [Message], D.SMSType AS [SMS Type], 
    (SELECT COUNT(d.MobNo) FROM dbo.DummyReportDetail AS d 
    WHERE d.UploadDate = '31/12/2012' AND d.UserID = '2' 
     AND d.UserType = 'Reseller' AND d.TokenNo = U.TokenNo) AS "Count", 
    D.DStatus AS "Status" 
FROM  
    dbo.DummyReportDetail AS D 
INNER JOIN 
    dbo.UploadedData AS U ON D.TokenNo = U.TokenNo 
WHERE 
    D.UploadDate = '31/12/2012' AND D.UserID = '2' 
    AND D.UserType = 'Reseller' AND D.TokenNo = U.TokenNo 
ORDER BY 
    D.TokenNo DESC 

이 쿼리에 대한 나의 출력은 다음과 같습니다 :

Token-4 31/12/2012 11:23:59 AM संपादकीय Unicode 2 SUBMITED 
Token-4 31/12/2012 11:24:9 AM संपादकीय Unicode 2 SUBMITED 
Token-3 31/12/2012 10:21:31 AM TestSMS Normal 1 SUBMITED 

하지만이 출력하려면 :

Token-4 31/12/2012 11:24:9 AM संपादकीय Unicode 2 SUBMITED 
Token-3 31/12/2012 10:21:31 AM TestSMS Normal 1 SUBMITED 

나를 도와주세요 ...

내 쿼리입니다 미리 감사드립니다.

+0

출력에서 ​​얻을 수있는 세 행은 ** 중복이 아닙니다 ** 다양한 열에 따라 다릅니다 - 그래서 'DISTINCT'가 이들을 제거하지 않습니다 ... –

답변

1
select distinct D.TokenNo, D.UploadDate as "Date",D.[Time], D.SMSContent as "Message",D.SMSType as "SMS Type", 
     (select count (d.MobNo) from dbo.DummyReportDetail as d 
      where d.UploadDate='31/12/2012' and d.UserID='2' 
      and d.UserType='Reseller' and d.TokenNo=U.TokenNo) as "Count" 
      ,D.DStatus as "Status" 
    from dbo.DummyReportDetail as D join dbo.UploadedData as U 
    on D.TokenNo=U.TokenNo 
    where D.UploadDate='31/12/2012' and D.UserID='2' 
    and D.UserType='Reseller' and D.TokenNo=U.TokenNo group by D.tokenNo order by D.TokenNo desc 

토큰으로 그룹 추가

0

필요한 것을 얻기 위해 그룹화를 적용해야합니다. 이 경우 , 당신은 모든 단일 열 그룹에 필요, 최대 날짜 수 :

select D.TokenNo, D.[Time], D.SMSContent as "Message",D.SMSType as "SMS Type", 
(select count (d.MobNo) from dbo.DummyReportDetail as d 
    where d.UploadDate='31/12/2012' and d.UserID='2' 
    and d.UserType='Reseller' and d.TokenNo=U.TokenNo) as "Count" 
    ,D.DStatus as "Status", MAX(D.UploadDate) as "Date" 
from dbo.DummyReportDetail as D join dbo.UploadedData as U 
on D.TokenNo=U.TokenNo 
where D.UploadDate='31/12/2012' and D.UserID='2' 
group by D.TokenNo, D.[Time], D.SMSContent, D.SMSType, Count, D.DStatus 
and D.UserType='Reseller' and D.TokenNo=U.TokenNo order by D.TokenNo desc 

당신은 또한 또한 "카운트에 대한 현재의 내부 쿼리를 대체하기 위해 그룹화 사용하도록 쿼리를 다시 작성 할 수 있습니다를 " 들. 테이블 조인은 조인이 한 번 수행 될 때 현재 쿼리보다 효율적입니다. 이제 하위 집합이 결과 집합에있는 각 행에 대해 한 번 실행됩니다.