मुझे पूरा यकीन है कि तालिका में डुप्लिकेट कॉलम मानों वाली पंक्तियाँ हैं:

SELECT
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus
FROM dm.Dim_TenancyReferral
WHERE ReferralID IN ('1138', '1940', '1946')
ORDER BY ReferralID

enter image description here

और मैं डुप्लिकेट ReferralID के साथ पंक्तियों की संख्या गिनने की कोशिश कर रहा हूं:

SELECT
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus,
    COUNT(*) [Occurrences]
FROM dm.Dim_TenancyReferral
GROUP BY
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus
HAVING COUNT(*) > 1

enter image description here

लेकिन खाली परिणाम सेट हो रहा है।

आपकी सहायता के लिए धन्यवाद।

0
silver 24 सितंबर 2020, 06:22

2 जवाब

सबसे बढ़िया उत्तर

आप कई गैर-अद्वितीय स्तंभों (TenancyReferralKey, FromDate, ToDate, ToDate_Value) के आधार पर समूह बना रहे हैं। यदि आप उन्हें हटा देते हैं, तो आपको वे डुप्लीकेट प्राप्त होंगे जो आप के बाद हैं उदा।

SELECT
    ReferralID,
    ReferralFor,
    ReferralStatus,
    COUNT(*) [Occurrences]
FROM dm.Dim_TenancyReferral
GROUP BY
    ReferralID,
    ReferralFor,
    ReferralStatus
HAVING COUNT(*) > 1
3
Dale K 24 सितंबर 2020, 06:31

अपनी क्वेरी में COUNT कथन संपादित करें। COUNT(*) [Occurrences], GROUP BY स्टेटमेंट में सभी कॉलमों के आधार पर समूहबद्ध होने पर टेबल में पंक्तियों की संख्या गिनता है। इसलिए प्रत्येक पंक्ति का अपना मान सेट होता है (ऐसे कोई मामले नहीं हैं जहां संपूर्ण रिकॉर्ड डुप्लिकेट है)। प्रयत्न

WITH cte AS (
SELECT
    TenancyReferralKey,
    FromDate,
    ToDate,
    ToDate_Value,
    ReferralID,
    ReferralFor,
    ReferralStatus,
    COUNT(*) OVER (PARTITION BY ReferralID) AS Occurences
FROM dm.Dim_TenancyReferral
)
SELECT
    *
FROM
    cte
WHERE
   Occurences > 0
;
1
Greg 24 सितंबर 2020, 06:32