【发布时间】:2019-04-05 06:59:27
【问题描述】:
我收到一个错误,即子查询返回多个值,我知道它会这样做,现在我想将该子查询结果转换为一个字符串,然后将该字符串插入到同一位置的表中
我已经尝试过使用循环,但由于除了查询之外我不能在其他任何地方使用循环,它并没有多大帮助。
这是我正在处理的查询
SELECT DISTINCT LiveCampaign_SubscriberList_Email.Email, Firstname, Lastname, dbo.spValueToString(Subscribed) AS Subscribed,
dbo.spValueToString((SELECT COUNT(*)
FROM tblEmailBlackList
WHERE tblEmailBlackList.Email = LiveCampaign_SubscriberList_Email.Email and tblEmailBlackList.PortalID = -2)) As GeneralBlockList,
(SELECT DISTINCT PortalLocalization.PortalName
FROM tblEmailBlackList
LEFT JOIN tblLiveCampaignSettings ON tblLiveCampaignSettings.ModuleID = tblEmailBlackList.ModuleID
LEFT JOIN PortalLocalization ON PortalLocalization.PortalID = tblEmailBlackList.PortalID AND PortalLocalization.CultureCode = 'sl-SI'
LEFT JOIN #tmp ON tblEmailBlackList.Email = #tmp.Email COLLATE Slovenian_CI_AS
WHERE LiveCampaign_SubscriberList_Email.Email = #tmp.Email COLLATE Slovenian_CI_AS
AND tblEmailBlackList.PortalID >= 0 OR tblEmailBlackList.PortalID =- 1)
AS LocalBlockList
FROM LiveCampaign_SubscriberList_Email
这是我需要转换成字符串的部分:
(SELECT DISTINCT PortalLocalization.PortalName
FROM tblEmailBlackList
LEFT JOIN tblLiveCampaignSettings ON tblLiveCampaignSettings.ModuleID = tblEmailBlackList.ModuleID
LEFT JOIN PortalLocalization ON PortalLocalization.PortalID = tblEmailBlackList.PortalID AND PortalLocalization.CultureCode = 'sl-SI'
LEFT JOIN #tmp ON tblEmailBlackList.Email = #tmp.Email COLLATE Slovenian_CI_AS
WHERE LiveCampaign_SubscriberList_Email.Email = #tmp.Email COLLATE Slovenian_CI_AS
AND tblEmailBlackList.PortalID >= 0 OR tblEmailBlackList.PortalID =- 1)
Result 将是一个字符串,然后将其插入到表中的同一行中,因为该子查询的结果应该是
【问题讨论】:
-
那么你需要给我们一个逻辑,通过它我们可以限制这个查询只返回一行。
-
@TimBiegeleisen 你这是什么意思?
-
所以你想聚合从你给出的查询返回的所有
PortalName,用一些东西分隔(比如说,如果它返回两行 - 'A'和'B',你希望它是' A, B'?) 然后插入到哪里? -
@MarcinJ 是的,可以返回多个 PortalName,我希望所有的都在一行中,并且插入的位置与子查询的结果相同。我将在其中添加更多代码
-
哪个 SQL Server 版本?能否请您添加 sql-server-
标签?
标签: sql sql-server sql-server-2014