【问题标题】:How to combine duplicate data rows from one table to just add more data to a column如何组合一个表中的重复数据行以仅将更多数据添加到一列
【发布时间】:2019-06-06 17:52:57
【问题描述】:

我想获取除一列之外的所有行包含重复数据,并获取一个唯一字段并将其放在一行中,并添加一列。我正在从三个不同的数据库创建一个表来创建:

Wk  RunOrder   Job Number    ModelNo ....   ItemTag
23     28          1234        abcd            1
23     28          1234        abcd            2
23     28          1234        abcd            3
23     28          1234        abcd            4
12     28          1222        abbd            2
12     28          1222        abbd            4

我想要的是:

Wk  RunOrder   Job Number    ModelNo ....   ItemTag
23     28          1234        abcd          1,2,3,4
23     28          1222        abbd            2,4

RunOrder 和 ItemTag 列来自不同的数据库

【问题讨论】:

  • 这些链接适用于 Apache.Spark,我正在使用 sql-server 管理,因此 collect_list 命令似乎不是一个可行的选择,感谢您提供的链接
  • 对不起,链接错误,应该是stackoverflow.com/questions/8005846/…
  • 不用担心,该链接似乎是一个硬编码的解决方案,有没有办法让它成为动态的?就像我在列表中有更多具有不同 JobNumber 的数据,我需要做同样的事情来

标签: sql sql-server


【解决方案1】:

我能够使用subquery 在下面获得所需的输出。我假设您想将 Wk 作为分组的一部分。

if OBJECT_ID('tempdb..#temp') is not null
    drop table #temp

CREATE TABLE #temp (
    Wk int,
    RunOrder int,
    JobNumber int,
    ModelNo VARCHAR(10),
    ItemTag VARCHAR(5)
)
insert into #temp  values(23,28,1234,'abcd',1)
insert into #temp  values(12,28,1234,'abcd',2)
insert into #temp  values(23,28,1234,'abcd',3)
insert into #temp  values(12,28,1234,'abcd',4)


select distinct  Wk,RunOrder,JobNumber,ModelNo,
    SUBSTRING(
        (
            SELECT ','+t1.ItemTag  AS [text()]
            FROM #temp t1
            WHERE t1.Wk = t2.Wk and t1.RunOrder=t2.RunOrder and t1.JobNumber=t2.JobNumber and t1.ModelNo=t2.ModelNo
            ORDER BY t1.Wk
            FOR XML PATH ('')
        ), 2, 1000) t
from #temp t2

您可以做的另一个解决方案是使用derived table

【讨论】:

  • 那我可能需要做一个子查询。我正在从三个不同的表中创建上述结果,对不起,我没有提到,我会把它扔进去
  • 对不起,我不是很清楚,上面的解决方案使用了“子查询”。我不知道其他表的架构,但一种解决方案可能是将它们全部加入并将它们放入临时表中,然后使用我的解决方案。
  • 您还应该能够将 #temp 替换为表的连接,具体取决于架构。
  • 我在考虑使用临时表。我也忘了提到我需要程序动态工作,因为我有其他重复的值,但程度不同。感谢您的帮助和时间,其他任何事情都非常感谢
  • 它应该仍然适用于不同的值,只要您在子查询的“where”子句中过滤要“分组依据”的列。
猜你喜欢
  • 2019-02-02
  • 2010-11-22
  • 1970-01-01
  • 2016-12-16
  • 2016-09-22
  • 2019-01-07
  • 1970-01-01
  • 2021-10-18
  • 2019-05-27
相关资源
最近更新 更多