SQL 查询返回某些值

问题描述 投票:0回答:1

我有这个 SQL 查询(我正在使用 Access):

SELECT 
    [tbl - User List].*, 
    [lnk - UserStatusList].[Employee Status], 
    [tbl - App por region].[region]
FROM 
    (
        -- Left Joining User List with Excepciones on Unique ID
        [tbl - User List] 
        LEFT JOIN [lnk - Excepciones] ON [tbl - User List].[Unique ID] = TRIM([lnk - Excepciones].[Unique ID])
    ) 
    LEFT JOIN [lnk - UserStatusList] ON [tbl - User List].[Unique ID] = [lnk - UserStatusList].[Unique ID SAP HR]
     LEFT JOIN [tbl - App por region] ON [tbl - user list].[resource] = [tbl - App por region].[app]
WHERE 
    (
        [lnk - Excepciones].[Unique ID] Is Null 
        AND [tbl - User List].[Resource status] NOT LIKE "Deregistered" 
        AND (
            ([tbl - User List].Resource) NOT LIKE "FOPAG" 
            AND ([tbl - User List].Resource) NOT LIKE "*_QA" 
            AND ([tbl - User List].Resource) NOT LIKE "*_DEV"  
            AND ([tbl - User List].Resource) NOT LIKE "ADGroup*"
        )
    )
ORDER BY [tbl - User List].[resource];

它工作正常,返回类似这样的内容(大约有 147.000 行用户): Query

问候 我希望查询像这样工作:

  • 如果资源中有多个唯一 ID,则根据以下条件仅返回一个值:
  1. 如果人力资源状态是“活跃”,请给我该行,我不在乎是否还有其他人处于“不活跃”或“撤回”状态
  2. 如果没有“活跃”人力资源状态,请给我“不活跃”状态(丢弃“撤回”)
  3. 如果没有“Active”或“Inactive”,那就给我“Withdrawn”

因此,对于这个例子,查询应该只给我这些值: Good query

我尝试使用 ChatGPT 来做到这一点,但没有成功。

sql ms-access
1个回答
0
投票

根据其他记录中的数据过滤记录并不简单,通常需要相关子查询或VBA函数。

这些状态值将按其优先顺序按字母顺序排序。考虑这个使用发布的示例查询结果作为源的查询:

SELECT *
FROM Query1 WHERE [HR Status] IN(
    SELECT TOP 1 [HR Status] FROM Query1 AS Dupe 
    WHERE Dupe.[Unique ID]=Query1.[Unique ID] 
    AND Dupe.Resource=Query1.Resource ORDER BY [HR Status]);
© www.soinside.com 2019 - 2024. All rights reserved.