原语句如下 :
select e.*,w.BufferDays as BufferDays,w.CalendarDate  as CalendarDate 
from [E_WIPAgingData]  e 
inner  join MCNNT805.[EDashboard].[dbo].[WIP_PMCTracker] w  on e.Project=w.subprojectwv COLLATE DATABASE_DEFAUL现在要加个需求:同一条Project有多个Buffer Days的,取Buffer Days 最小的. 

解决方案 »

  1.   

    SELECT * 
    FROM 
    (select e.*,w.BufferDays as BufferDays,w.CalendarDate  as CalendarDate,
    ROW_NUMBER() OVER (PARTITION BY Project ORDER BY BufferDays) AS RN
    from [E_WIPAgingData]  e 
    inner  join MCNNT805.[EDashboard].[dbo].[WIP_PMCTracker] w  on e.Project=w.subprojectwv) AS A
    WHERE RN=1
    COLLATE DATABASE_DEFAUL
      

  2.   

    不对啊 兄弟 报错了:
    Msg 468, Level 16, State 9, Line 8
    Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.
    Msg 209, Level 16, State 1, Line 6
    Ambiguous column name 'Project'.
      

  3.   

    这是你查询的结果中排序规则有冲突,有多个排序方式,可以试试直接min(BufferDays)
      

  4.   

    select e.*,w.BufferDays as BufferDays,w.CalendarDate  as CalendarDate 
    from [E_WIPAgingData]  e 
    inner  join ( Select * 
      From MCNNT805.[EDashboard].[dbo].[WIP_PMCTracker] x
      Where BufferDays=(Select MIN(BufferDays) 
      From MCNNT805.[EDashboard].[dbo].[WIP_PMCTracker] y
      Where x.subprojectwv=y.subprojectwv)) w  on e.Project=w.subprojectwv COLLATE DATABASE_DEFAUL
      

  5.   

    用min(BufferDays)取最小值吧
      

  6.   

    SELECT  e.* ,
            w.BufferDays AS BufferDays ,
            w.CalendarDate AS CalendarDate
    FROM    [E_WIPAgingData] e
            INNER  JOIN ( SELECT    subprojectwv ,
                                    MIN(BufferDays)
                          FROM      MCNNT805.[EDashboard].[dbo].[WIP_PMCTracker]
                          GROUP BY  subprojectwv
                        ) w ON e.Project = w.subprojectwv COLLATE DATABASE_DEFAUL;