Sql 仅从我要加入的表中的列中选择前1个值?

Sql 仅从我要加入的表中的列中选择前1个值?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,下面是一个查询,如何将前1个agencyID存储到DCA.agencyID中?我知道下面的查询现在的结构将选择所有agencyID值,而不仅仅是前1个 SELECT AP.ID ,DCA.AgencyID as agencyID --How to store select top 1? ,replace(LTRIM(RTRIM(AP.UserNameWebsite)), '\', '') AS username ,replace(LTRIM(RTR

下面是一个查询,如何将前1个agencyID存储到DCA.agencyID中?我知道下面的查询现在的结构将选择所有agencyID值,而不仅仅是前1个

SELECT AP.ID
        ,DCA.AgencyID as agencyID --How to store select top 1?
        ,replace(LTRIM(RTRIM(AP.UserNameWebsite)), '\', '') AS username
        ,replace(LTRIM(RTRIM(AP.FirstName)), '\', '') + N' ' + replace(LTRIM(RTRIM(AP.LastName)), '\', '') AS fullName
        ,LTRIM(RTRIM(AP.EmailAddress)) AS email
        ,LTRIM(RTRIM(AP.Phone1)) AS phone1
        ,LTRIM(RTRIM(AP.Phone2)) AS phone2
        ,LTRIM(RTRIM(AP.GreenSolution)) AS greenSolution
        ,CASE 
            WHEN UserType = 'AM'
                THEN 1
            ELSE 0
            END AS producer
    FROM DEV01_DataExchange.[DuckCreek].[fpmAgentsProfile] AP
    Inner Join [DUCKCREEK_DEV].[DEV01_DuckCreek_Consolidated].[dbo].Agency DCA
    on AP.AgencyID = DCA.Reference
    WHERE TransType = 'A' AND DC_LastModifiedDate IS NULL AND DCA.Reference is NOT NULL

你的问题有点模糊,但答案是交叉适用的:

通常会使用ORDERBY子句。也许是DCA.AgencyID描述的订单?然而,如果有一个名为AgencyID的列,我很惊讶它没有被用于对齐AP


另外,一些WHERE条件可能属于子查询。

您的问题有点模糊,但答案是交叉应用的:

通常会使用ORDERBY子句。也许是DCA.AgencyID描述的订单?然而,如果有一个名为AgencyID的列,我很惊讶它没有被用于对齐AP


此外,一些WHERE条件可能属于子查询。

您可以使用交叉应用而不是联接:

SELECT   AP.ID
        ,DCA.AgencyID as agencyID
        ,replace(LTRIM(RTRIM(AP.UserNameWebsite)), '\', '') AS username
        ,replace(LTRIM(RTRIM(AP.FirstName)), '\', '') + N' ' + replace(LTRIM(RTRIM(AP.LastName)), '\', '') AS fullName
        ,LTRIM(RTRIM(AP.EmailAddress)) AS email
        ,LTRIM(RTRIM(AP.Phone1)) AS phone1
        ,LTRIM(RTRIM(AP.Phone2)) AS phone2
        ,LTRIM(RTRIM(AP.GreenSolution)) AS greenSolution
        ,CASE 
            WHEN UserType = 'AM'
                THEN 1
            ELSE 0
            END AS producer
    FROM DEV01_DataExchange.[DuckCreek].[fpmAgentsProfile] AP
    Cross Apply
    (
        Select top 1 AG.*
        From [DUCKCREEK_DEV].[DEV01_DuckCreek_Consolidated].[dbo].Agency AG
        where AG.Reference = AP.AgencyID
    ) DCA
    WHERE TransType = 'A' AND DC_LastModifiedDate IS NULL AND DCA.Reference is NOT NULL

您可以使用交叉应用而不是联接:

SELECT   AP.ID
        ,DCA.AgencyID as agencyID
        ,replace(LTRIM(RTRIM(AP.UserNameWebsite)), '\', '') AS username
        ,replace(LTRIM(RTRIM(AP.FirstName)), '\', '') + N' ' + replace(LTRIM(RTRIM(AP.LastName)), '\', '') AS fullName
        ,LTRIM(RTRIM(AP.EmailAddress)) AS email
        ,LTRIM(RTRIM(AP.Phone1)) AS phone1
        ,LTRIM(RTRIM(AP.Phone2)) AS phone2
        ,LTRIM(RTRIM(AP.GreenSolution)) AS greenSolution
        ,CASE 
            WHEN UserType = 'AM'
                THEN 1
            ELSE 0
            END AS producer
    FROM DEV01_DataExchange.[DuckCreek].[fpmAgentsProfile] AP
    Cross Apply
    (
        Select top 1 AG.*
        From [DUCKCREEK_DEV].[DEV01_DuckCreek_Consolidated].[dbo].Agency AG
        where AG.Reference = AP.AgencyID
    ) DCA
    WHERE TransType = 'A' AND DC_LastModifiedDate IS NULL AND DCA.Reference is NOT NULL

你如何定义TOP1?最长名称、最大预算等。在查询中使用TOP 1和ORDER BY,而不是JOIN。DCA表中还有哪些列可以定义“TOP 1”?如何定义TOP 1?最长名称、最大预算等。在查询中使用“应用”时,当然要使用TOP 1和ORDER BY,而不是JOIN。DCA表中还有哪些列可以定义“TOP 1”?应用的子查询中缺少ORDER BY。@Larnu:从技术上讲,ORDER BY是不必要的。在这种情况下,他似乎只需要第一次匹配就可以从Agency表中获取AgencyId。但是,这并不一定是一致和可靠的结果所必需的。没有订单时没有第一行,因此返回的不是第一行,而是任意一行。在应用程序的子查询中缺少一个order BY。@Larnu:从技术上讲,order BY是不必要的。在这种情况下,他似乎只需要第一次匹配就可以从Agency表中获取AgencyId。但是,这并不一定是一致和可靠的结果所必需的。没有订单时没有第一行,因此返回的不是第一行,而是任意行。