访问包含FIRST()的SQL查询转换

时间:2015-02-05 19:55:22

标签: sql sql-server sql-server-2008 ms-access

我正在将MS Access查询转换为SQL Server存储过程。我达到了这一点:

SELECT 
    AuthNum, AuthStatus, DateCreated, 
    MIN(DateInitiated) AS DateInitiated, 
    EventClassification, 
    FIRST(PlaceOfService) AS PlaceOfService, 
    Lob, MemId, 
    MAX(NoticeDate) AS NoticeDate, 
    MAX(Tat) AS Tat, 
    FIRST(StaffId) AS StaffId
FROM 
    PA_TAT_Detailed
GROUP BY 
    AuthNum, AuthStatus, DateCreated, EventClassification, Lob, MemId
HAVING
    ((FIRST(PlaceOfService) <> 'Inpatient Hospital') 
     AND (FIRST(PlaceOfService) <> 'Office - Dental') 
     AND (FIRST(PlaceOfService) <> 'Dialysis Center'))
    AND 
    ((MAX(Tat) Is Null) OR ((MAX(Tat) >= 0) AND (MAX(Tat) <= 28)))
ORDER BY 
    AuthNum;

但我不知道如何转换FIRST运营商。有什么想法吗?我是否需要添加与ORDER BY相关联的GROUP BY,以便我可以TAKE 1

在这种情况下,MIN会给出相同的结果吗?

BTW PlaceOfService,StaffId是字符串。

1 个答案:

答案 0 :(得分:0)

这样的事情应该非常接近。仔细检查这是否返回正确的信息。

SELECT top 1 AuthNum
    , AuthStatus
    , DateCreated
    , MIN(DateInitiated) AS DateInitiated
    , EventClassification
    , PlaceOfService
    , Lob
    , MemId
    , MAX(NoticeDate) AS NoticeDate
    , MAX(Tat) AS Tat
    , StaffId
FROM PA_TAT_Detailed
where PlaceOfService not in ('Inpatient Hospital', 'Office - Dental', 'Dialysis Center')
GROUP BY AuthNum
    , AuthStatus
    , DateCreated
    , EventClassification
    , PlaceOfService
    , Lob
    , MemId
    , StaffId
HAVING MAX(Tat) Is Null 
    OR (MAX(Tat) >= 0 AND MAX(Tat) <= 28)
ORDER BY AuthNum;