问题描述
下面是查询,如何将仅前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
解决方法
您的问题有点含糊,但答案是cross apply
:
FROM DEV01_DataExchange.[DuckCreek].[fpmAgentsProfile] AP CROSS APPLY
(SELECT TOP (1) DCA.*
FROM [DUCKCREEK_DEV].[DEV01_DuckCreek_Consolidated].[dbo].Agency DCA
WHERE AP.AgencyID = DCA.Reference
) DCA
WHERE TransType = 'A' AND DC_LastModifiedDate IS NULL AND DCA.Reference is NOT NULL;
通常将使用ORDER BY
子句。也许ORDER BY DCA.AgencyID DESC
?但是,如果有一个名为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