首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >select语句中的重复记录,但复杂连接中的一列除外

select语句中的重复记录,但复杂连接中的一列除外
EN

Stack Overflow用户
提问于 2016-12-31 01:16:51
回答 0查看 79关注 0票数 1

因此,我有一个查询,它将选择具有长连接和聚合的数据指标。除了一列之外,一些结果似乎会返回重复的结果,那就是事务编号。原因是对完全相同的记录进行了单独的事务处理。我们不能只是为了保存记录而删除交易。我的查询如下:

代码语言:javascript
运行
复制
SELECT distinct (SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,MAX(GreatestDate)) + 1, 0))
                 FROM 
                (VALUES (max(th.TransactionEffectiveDt)),(max(bp.EffectiveDt)),(max(th.TransactionDt))) AS Value(GreatestDate)) AS BookDate
    ,th.Transactioncd TransactionType
    ,bp.PolicyNumber PolicyNumber
    ,cast(bp.EffectiveDt AS DATE) EffectiveDate
    ,max(cast(th.TransactionEffectiveDt AS DATE)) TransactionEffectiveDate
    ,NULL WINS_TransactionNumber
    ,th.TransactionNumber TransactionNumber
    ,cast(bp.ExpirationDt AS DATE) ExpirationDate
    ,replace(UPPER(ni.IndexName), ',', '') InsuredName
    ,replace(isnull(UPPER(ad.Addr1), '') + ' ' + isnull(UPPER(ad.Addr2), '') + ' ' + isnull(UPPER(ad.Addr3), '') + ' ' + isnull(UPPER(ad.Addr4), ''), ',', '') InsuredStreetAddress
    ,UPPER(ad.City) InsuredCity
    ,UPPER(ad.StateProvCd) InsuredState
    ,ad.PostalCode InsuredZipCode
    ,i.EntityTypeCd InsuredType
    ,isnull(tr.ReasonCd, '') ReasonCode
    ,cast(datediff(mm, th.transactioneffectivedt, bp.expirationdt) / cast(datediff(mm, bp.effectivedt, bp.expirationdt) AS DECIMAL(15, 4)) AS DECIMAL(15, 4)) ProrateFactor
    ,isnull(cast(th.writtenpremiumamt as int), '0') APRP
    ,isnull(cast(th.inforcepremiumamt as int), '0') AnnualPremium
    ,CONVERT(INT,REPLACE(REPLACE(REPLACE(ln.DWELLLimit, '.00', ''), '$', ''),',','')) AggreLimit
    ,'0' YrConstruction
    ,ln.PROPDed +'%' [% loss ded EQ]
    ,CASE 
        WHEN BD.bldgnumber > 0
        THEN '0' END as Ind
    ,'0' CovA
    ,'0' CovB
    ,'0' CovC
    ,'0' CovD
    ,'0' CovE
    ,'0' CovF
FROM java.basicpolicy bp
INNER JOIN java.nameinfo ni ON ni.SystemId = bp.SystemId
    AND ni.CMMContainer = bp.CMMContainer
INNER JOIN java.line ln ON ln.CMMContainer = bp.CMMContainer
    AND bp.SystemId = ln.SystemId
INNER JOIN java.building bd ON bd.CMMContainer = bp.CMMContainer
    AND bd.SystemId = bp.SystemId
INNER JOIN java.addr ad ON ad.CMMContainer = ni.CMMContainer
    AND bp.SystemId = ad.SystemId
    AND ad.AddrTypeCd = 'InsuredMailingAddr'
INNER JOIN java.transactionhistory th ON th.CMMContainer = bp.CMMContainer
    AND th.SystemId = bp.SystemId
LEFT JOIN java.transactionreason tr ON tr.CMMContainer = bp.CMMContainer
    AND TR.SystemId = bp.SystemId
    AND TR.ParentId = th.ID
INNER JOIN java.insured i ON i.CMMContainer = bp.CMMContainer
    AND i.SystemId = bp.SystemId
WHERE bp.CMMContainer = 'policy'
    AND ni.NameTypeCd = 'INSUREDNAME'
    AND (
        th.TransactionCd IN (
            'new business'
            ,'endorsement'
            ,'cancellation'
            ,'rewrite-new'
            )
        OR (
            th.WrittenPremiumAmt IS NOT NULL
            AND th.WrittenPremiumAmt <> 0
            AND th.TransactionCd IN ('reinstatement')
            )
        )
    AND bp.CarrierCd = 'ENIC'
    AND bp.PolicyNumber = '84EQ000006'
GROUP BY
    th.Transactioncd
    ,bp.PolicyNumber 
    ,cast(bp.EffectiveDt AS DATE) 
    ,cast(th.TransactionEffectiveDt AS DATE)
    ,th.TransactionNumber 
    ,cast(bp.ExpirationDt AS DATE)
    ,UPPER(ni.IndexName)
    ,(isnull(UPPER(ad.Addr1), '') + ' ' + isnull(UPPER(ad.Addr2), '') + ' ' + isnull(UPPER(ad.Addr3), '') + ' ' + isnull(UPPER(ad.Addr4), ''))
    ,UPPER(ad.City) 
    ,UPPER(ad.StateProvCd) 
    ,ad.PostalCode 
    ,i.EntityTypeCd 
    ,isnull(tr.ReasonCd, '') 
    ,cast(datediff(mm, th.transactioneffectivedt, bp.expirationdt) / cast(datediff(mm, bp.effectivedt, bp.expirationdt) AS DECIMAL(15, 4)) AS DECIMAL(15, 4))
    ,isnull(cast(th.writtenpremiumamt as int), '0')
    ,isnull(cast(th.inforcepremiumamt as int), '0')
    ,CONVERT(INT,REPLACE(REPLACE(REPLACE(ln.DWELLLimit, '.00', ''), '$', ''),',',''))
    ,ln.PROPDed +'%'
    ,CASE 
        WHEN BD.bldgnumber > 0
        THEN '0' END 
ORDER BY PolicyNumber
        ,transactionnumber
        ,Ind
        ,BOOKDATE

结果集如下:

请注意,事务处理编号列是否具有事务处理4和5?除了交易号之外,其他的都是一样的。我不能删除一条记录。因此,对于此实例,由于存在重复的记录,因此客户端只希望看到其中的一个。我尝试过使用row_number()和group by函数,但我认为由于有很多连接,这会让我放弃。我需要一个select语句,它只显示其中的一个,因为这只是一个非常大的存储过程的一部分。我已经在使用临时表做其他事情了,所以我不认为我可以使用它,因为各种各样的原因。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41400044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档