【发布时间】:2015-10-19 19:04:52
【问题描述】:
我的表结构如下:
表 1 - 可能的地区/市场选项列表
Region | Market
--------+----------------
EMEA | London
NA | Omaha
EMEA | Another City
Table2 - 保存被选为影响的市场
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>
【问题讨论】:
-
表 2 应该是“区域”,因为您列出了来自表 1 的城市而不是市场?
-
您能否展示您正在寻找的预期输出样本?
标签: sql-server stored-procedures sql-server-2012