Select 只有我加入的 table 列中的前 1 个值?
Select only the top 1 value from a column in a table that I'm joining?
所以下面是查询,我怎样才能只将前 1 个“agencyID”存储到 DCA.AgencyID 中?我知道下面查询的结构现在将 select 所有“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
所以下面是查询,我怎样才能只将前 1 个“agencyID”存储到 DCA.AgencyID 中?我知道下面查询的结构现在将 select 所有“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