我有以下表结构:
表1 - 可能的地区/市场选择清单
Region | Market
--------+----------------
EMEA | London
NA | Omaha
EMEA | Another City
表2 - 保留被选为影响的市场
RequestID | Market
------------+----------------
123 | London
123 | Omaha
456 | Another City
在我的存储过程中,我正在尝试根据Table2
创建一个受影响的区域/市场列表。最终结果将是一个独特的区域列表,其中所有市场都受到影响。
在这种情况下,EMEA
区域会产生两种影响,但我不希望EMEA
出现两次。
当我在单个请求中执行此操作时,我能够创建临时表并将数据插入其中,然后完成我需要执行的操作。但是,这是拉动所有结果,我需要在查询中执行此操作,我不知道如何...
如果我没有从中获取不同的数据,此代码可以正常工作。否则,它会抛出错误:
无法将xml数据类型选为DISTINCT,因为它无法比较。
我是否可以通过其他方式在子查询/子选择中完成此操作?
...
(SELECT DISTINCT
region,
(SELECT m.market
FROM dbo.bs_ToolRequests_MarketOptions AS m
INNER JOIN dbo.BS_ToolRequests_ImpactedMarkets AS ma ON ma.market = m.market
WHERE m.region = mo.region
AND ma.requestID = t.requestID
FOR XML PATH ('options'), TYPE, ELEMENTS, ROOT ('markets'))
FROM
dbo.BS_ToolRequests_MarketOptions AS mo
FOR XML PATH ('regions'), TYPE, ELEMENTS, ROOT ('impactedMarkets')),
预期结果:
<impactedMarkets>
<regions>
<region>EMEA</region>
<markets>
<options>
<market>London</market>
</options>
<options>
<market>Another City</market>
</options>
</markets>
</regions>
</impactedMarkets>
答案 0 :(得分:0)
您可能需要在派生表的
的SELECT语句中使用DISTINCT关键字 ...
(SELECT region,
(SELECT m.market
FROM dbo.bs_ToolRequests_MarketOptions AS m
INNER JOIN dbo.BS_ToolRequests_ImpactedMarkets AS ma ON ma.market = m.market
WHERE m.region = mo.region
AND ma.requestID = t.requestID
FOR XML PATH ('options'), TYPE, ELEMENTS, ROOT ('markets'))
FROM
(SELECT DISTINCT region FROM dbo.BS_ToolRequests_MarketOptions) AS mo
FOR XML PATH ('regions'), TYPE, ELEMENTS, ROOT ('impactedMarkets')),