【问题标题】:SQL: Select distinct while ignoring one columnSQL:在忽略一列的同时选择不同的
【发布时间】:2015-04-27 16:22:30
【问题描述】:

所以下面的查询真的很好,除了一个主要缺陷,pr.notes 字段是文本,你不能区分文本,因为它不可比较,有没有办法让我仍然选择它?

SELECT * FROM (

    select distinct d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref,t.Subject,t.CreatedDate,pr.notes 
    , RANK() OVER ( PARTITION BY  N.FullName ORDER BY t.CreatedDate DESC ) AS iRank


    from Dial d
    join Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
    join Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
    join Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
    join Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID
    join Database.dbo.Tasks T on T.FK_ApplicationID = c.FK_ApplicationID
    join database.dbo.dm_projects pr on pr.fk_applicationid = T.fk_applicationid
where c.FK_ClientID in (39157,39160)

) AS t 
WHERE t.iRank = 1

【问题讨论】:

标签: sql sql-server


【解决方案1】:

pr.notes 转换为VARCHAR(MAX)NVARCHAR(MAX),具体取决于它所拥有的数据(我假设您使用的是SQL Server - 当我看到您的代码时看起来就是这种情况)。

    SELECT * FROM (

        select distinct d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref,
        t.Subject,t.CreatedDate,CAST(pr.notes AS NVARCHAR(MAX)) AS notes, 
        RANK() OVER ( PARTITION BY  N.FullName ORDER BY t.CreatedDate DESC ) AS iRank

        from Dial d
        join Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
        join Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
        join Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
        join Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID
        join Database.dbo.Tasks T on T.FK_ApplicationID = c.FK_ApplicationID
        join database.dbo.dm_projects pr on pr.fk_applicationid = T.fk_applicationid
    where c.FK_ClientID in (39157,39160)

    ) AS t 
    WHERE t.iRank = 1;

【讨论】:

  • 一旦我也有能力(7 分钟)你得到这个答案:D 谢谢!
  • 我们使用数据库是噩梦的应用程序 - 大多数字符串列都是“文本”数据类型。 PK 也是text 字段,所以对我来说很容易回答这样的问题:)。您也可以尝试更改该列的数据类型 - 在我们的示例中它可以工作,但您必须进行测试。
  • 告诉我,我们使用的程序有很多令人难以置信的怪癖。
猜你喜欢
  • 2023-02-26
  • 2011-12-24
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
相关资源
最近更新 更多