【问题标题】:TSQL Distinct within subquery using xml使用xml的子查询中的TSQL不同
【发布时间】: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


【解决方案1】:

可能需要在派生表的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')),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多