【问题标题】:Getting related Records according to a column根据列获取相关记录
【发布时间】:2017-07-25 09:13:58
【问题描述】:

我有一张包含这些字段的表格

   id     tagNo      FromLayout    ToLayout
  -----------------------------------------
   1      10000         +A1           +B1
   2      10002         +B1           +B3
   3      10004         +B1           +F10
   4      10005         +B2           +F20
   5      10008         +B3           +C63
   6      10009         +D3           +D63
   7      10010         +D63          +G23
   8      10010         +D63          +G3

我想要所有记录 + 一个新列,该列显示当前记录的 ToLayout 等于它们的 FromLayout 的记录。我想要这样的结果

   id     tagNo      FromLayout    ToLayout     sNode
  ---------------------------------------------------
   1      10000         +A1           +B1       10002,10004
   2      10002         +B1           +B3       10008
   3      10004         +B1           +F10
   4      10005         +B2           +F20
   5      10008         +B3           +C63
   6      10009         +D3           +D63       10010,10012
   7      10010         +D63          +G23   
   8      10012         +D63          +G3

为此目的选择代码是什么?

【问题讨论】:

  • 你试过了吗?

标签: sql tsql select


【解决方案1】:

试试这个查询。我已经执行并检查了输出:

SELECT * FROM (
select *, STUFF((SELECT ', ' + CAST(tagno AS VARCHAR(100)) 
     FROM layout 
     WHERE fromlayout = l.tolayout
     FOR XML PATH(''), TYPE)
    .value('.','NVARCHAR(MAX)'),1,2,' ') sNode  from layout l 
    )  a
    where sNode is not null

【讨论】:

    【解决方案2】:

    我的方法是将您的原始表加入 CTE,该 CTE 为每个 FromLayout 计算 tagNo 的 CSV 列表。

    WITH cte AS (
        SELECT FromLayout,
            STUFF((
                SELECT ',' + t2.tagNo
                FROM yourTable t2
                WHERE t1.FromLayout = t2.FromLayout
                FOR XML PATH('')), 1, 1, '') AS sNode
        FROM yourTable t1
    )
    
    SELECT
        t1.*,
        COALESCE(t2.sNode, '') AS sNode
    FROM yourTable t1
    LEFT JOIN cte t2
        ON t1.ToLayout = t2.FromLayout
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多