Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ode>是重复的,您希望根据ID字段获得最新的条目吗?字段PersonID似乎来自EAC.Person表。在EAC.WiegandCredential或EAC.Credential中是否有PersonID字段?或者可能是Person表中的Credentia_Sql Server_Report_Builder - Fatal编程技术网

Sql server ode>是重复的,您希望根据ID字段获得最新的条目吗?字段PersonID似乎来自EAC.Person表。在EAC.WiegandCredential或EAC.Credential中是否有PersonID字段?或者可能是Person表中的Credentia

Sql server ode>是重复的,您希望根据ID字段获得最新的条目吗?字段PersonID似乎来自EAC.Person表。在EAC.WiegandCredential或EAC.Credential中是否有PersonID字段?或者可能是Person表中的Credentia,sql-server,report,builder,Sql Server,Report,Builder,ode>是重复的,您希望根据ID字段获得最新的条目吗?字段PersonID似乎来自EAC.Person表。在EAC.WiegandCredential或EAC.Credential中是否有PersonID字段?或者可能是Person表中的CredentialID?Person表中没有CredentialID,EAC.WiegandCredential有PinCode]、[CardCode]、[SiteCode]、[LastPrintedUTC]、[CredentialID]。EAC.Creden



ode>是重复的,您希望根据
ID
字段获得最新的条目吗?字段
PersonID
似乎来自
EAC.Person
表。在
EAC.WiegandCredential
EAC.Credential
中是否有
PersonID
字段?或者可能是
Person
表中的
CredentialID
?Person表中没有CredentialID,EAC.WiegandCredential有PinCode]、[CardCode]、[SiteCode]、[LastPrintedUTC]、[CredentialID]。EAC.Credential有一个PersonId。EAC.Credential表中有很多记录,有很多重复的PersonId;我需要那些ID最高的,所以我从那里得到最后一条插入的记录。EAC.Credential有[Id]、[IsActive]、[ActivationDateUTC]、[ExpirationDateUTC]、[ExternalId]、[PersonId]、[CustomerID]、[ServerID]字段,因此如果我理解正确,第一个数据集和第二个数据集之间的唯一连接是
PersonId
,它存在于
EAC.Person
EAC.Credential
中;但是在
EAC.Credential
中,
PersonID
是重复的,您需要根据
ID
字段的最新条目?OP在评论中提到,他只需要
EAC.Credential
中的
PersonID
的最新行。你的方法会奏效,但你需要添加一个
TOP
子句。谢谢你的解释,我更新了我的答案。但是对于每个人最近的一行“EAC.Credential”,您的解决方案更好。这与上面的查询一样非常有效,但是这里我也为每个用户获得了5个重复的结果。我有5个组,但并非所有组中都有。OP在评论中提到,他只想要
PersonID
EAC.Credential
的最新一行。你的方法会奏效,但你需要添加一个
TOP
子句。谢谢你的解释,我更新了我的答案。但是对于每个人最近的一行“EAC.Credential”,您的解决方案更好。这与上面的查询一样非常有效,但是这里我也为每个用户获得了5个重复的结果。我有5个小组,但不是每个人都在所有的小组中。这非常接近我需要的,但是我得到了每个人5个重复的结果,我检查了我的小组,有5个小组,所以这可能是原因。有什么想法吗?意思是每个
PersonID
EAC.Group
表中存在5次?我添加了DISTINCT,现在似乎有效,我从155个结果增加到31个结果。我想你们都明白了。我将做更多的测试,并向您报告。非常感谢,不用担心<代码>清晰有时可能有点混乱。如果复制背后有一个逻辑原因,我只需要理解它,我们也可以解决它。我能看到的唯一原因是5个组,似乎查询贯穿了这些组,并为每个用户添加了一个结果。我不知道如何解释,但这是我能想到的一切这非常接近我需要的,但是我得到了每个人5个重复的结果,我检查了我的组,有5个组,所以这可能是原因。有什么想法吗?意思是每个
PersonID
EAC.Group
表中存在5次?我添加了DISTINCT,现在似乎有效,我从155个结果增加到31个结果。我想你们都明白了。我将做更多的测试,并向您报告。非常感谢,不用担心<代码>清晰有时可能有点混乱。如果复制背后有一个逻辑原因,我只需要理解它,我们也可以解决它。我能看到的唯一原因是5个组,似乎查询贯穿了这些组,并为每个用户添加了一个结果。我不知道该怎么解释,但这就是我所能想到的
SELECT 
    EAC.Person.FirstName, 
    EAC.Person.Id,
    EAC.Person.LastName, 
    EAC.Person.EmployeeId, 
    EAC.Person.IsDeleted, 
    Controller.Cards.SiteCode, 
    Controller.Cards.CardCode, 
    Controller.Cards.ActivationDate, 
    Controller.Cards.ExpirationDate, 
    Controller.Cards.Status, 
    EAC.[Group].Name
FROM         
    EAC.Person 
INNER JOIN 
    Controller.Cards ON EAC.Person.Id = Controller.Cards.PersonId 
INNER JOIN 
    EAC.GroupPersonMap ON EAC.Person.Id = EAC.GroupPersonMap.PersonId 
INNER JOIN 
    EAC.[Group] ON EAC.GroupPersonMap.GroupId = EAC.[Group].Id
SELECT
    IsActive, ActivationDateUTC, ExpirationDateUTC, 
    Sitecode + '-' + Cardcode AS Credential, 'Badge' AS Type, 
    CASE 
       WHEN isActive = 0 
          THEN 'InActive' 
       WHEN ActivationDateUTC > GetUTCDate() 
          THEN 'Pending' 
       WHEN ExpirationDAteUTC < GetUTCDate() 
          THEN 'Expired' 
       ELSE 'Active' 
    END AS Status
FROM
    EAC.Credential
JOIN
    EAC.WiegandCredential ON Credential.ID = WiegandCredential.CredentialId
WHERE 
    PersonID = '32'
    select Query1.*, Query2.* from (
    SELECT 
        EAC.Person.FirstName, 
        EAC.Person.Id as PersonId,
        EAC.Person.LastName, 
        EAC.Person.EmployeeId, 
        EAC.Person.IsDeleted, 
        Controller.Cards.SiteCode, 
        Controller.Cards.CardCode, 
        Controller.Cards.ActivationDate, 
        Controller.Cards.ExpirationDate, 
        Controller.Cards.Status, 
        EAC.[Group].Name
    FROM         
        EAC.Person 
    INNER JOIN 
        Controller.Cards ON EAC.Person.Id = Controller.Cards.PersonId 
    INNER JOIN 
        EAC.GroupPersonMap ON EAC.Person.Id = EAC.GroupPersonMap.PersonId 
    INNER JOIN 
        EAC.[Group] ON EAC.GroupPersonMap.GroupId = EAC.[Group].Id) 
        Query1 inner join (SELECT top 100
        IsActive, ActivationDateUTC, ExpirationDateUTC, 
        Sitecode + '-' + Cardcode AS Credential, 'Badge' AS Type, 
        CASE 
           WHEN isActive = 0 
              THEN 'InActive' 
           WHEN ActivationDateUTC > GetUTCDate() 
              THEN 'Pending' 
           WHEN ExpirationDAteUTC < GetUTCDate() 
              THEN 'Expired' 
           ELSE 'Active' 
        END AS Status
    FROM
        EAC.Credential
    JOIN
        EAC.WiegandCredential ON Credential.ID = WiegandCredential.CredentialId
ORDER BY EAC.Credential.ID DESC) Query2 ON Query1.PersonId = Query2.PersonID
SELECT 
     EAC.Person.FirstName
    ,EAC.Person.Id
    ,EAC.Person.LastName
    ,EAC.Person.EmployeeId
    ,EAC.Person.IsDeleted
    ,Controller.Cards.SiteCode 
    ,Controller.Cards.CardCode
    ,Controller.Cards.ActivationDate
    ,Controller.Cards.ExpirationDate
    ,Controller.Cards.Status
    ,EAC.[Group].Name
    ,X.IsActive
    ,X.ActivationDateUTC
    ,X.ExpirationDateUTC
    ,X.Credential
    ,X.Type
    ,X.Status
FROM EAC.Person 
INNER JOIN Controller.Cards 
    ON EAC.Person.Id = Controller.Cards.PersonId 
INNER JOIN EAC.GroupPersonMap 
    ON EAC.Person.Id = EAC.GroupPersonMap.PersonId 
INNER JOIN EAC.[Group] 
    ON EAC.GroupPersonMap.GroupId = EAC.[Group].Id
CROSS APPLY 
    (
        SELECT TOP 1
             IsActive
            ,ActivationDateUTC
            ,ExpirationDateUTC
            ,Sitecode + '-' + Cardcode AS Credential
            ,'Badge' AS Type
            ,'Status' = 
                CASE
                    WHEN isActive = 0
                        THEN 'InActive'
                    WHEN ActivationDateUTC > GETUTCDATE()
                        THEN 'Pending'
                    WHEN ExpirationDateUTC < GETUTCDATE()
                        THEN 'Expired'
                    ELSE 'Active'
                END 
        FROM EAC.Credential
        INNER JOIN EAC.WiegandCredential
            ON EAC.Credential.ID = EAC.WiegandCredential.CredentialId 
        WHERE EAC.Credential.PersonID = EAC.Person.PersonID
        ORDER BY EAC.Credential.ID DESC
    ) AS X
-- Optionally, you can also add conditions to return specific rows, i.e.:
-- WHERE EAC.Person.PersonID = 32