【问题标题】:Duplicate row based in column value基于列值的重复行
【发布时间】:2018-05-08 14:51:45
【问题描述】:

当一列中有多个值时,我需要复制行。 例子:

A  B  12  I76J-I76H=>
A  B  12  I76J
A  B  12  I76H

谢谢。

【问题讨论】:

  • 需要多少个 max 值,由 - 第 4 列分隔?每次只有两个吗?
  • 我认为我可以拥有的最大值是 5 。

标签: sql tsql reporting-services ssrs-2008 ssrs-2012


【解决方案1】:

感谢用户@RichardTheKiwi 提供了大部分代码HERE

无论如何,这里是代码。如果您想更改 sql 以便它不会根据您选择的字符进行分离 - 只需全部替换 - 即可。

创建表:

    create table Testdata(Data1 varchar(50), Data2 varchar(50), Data3 int, Data4 varchar(max))
    insert Testdata select 'A', 'E', '9', 'I76J-I76H-I76I-I76G'
    insert Testdata select 'B', 'F', '8', 'I76J-I76H-I76I'
    insert Testdata select 'C', 'G', '7', 'I76J-I76H'
    insert Testdata select 'D', 'H', '6', 'I76J'

现在更新原表TestData

;with tmp(Data1, Data2, Data3, DataItem, Data4) as (
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1),
    STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '')
from Testdata
union all
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1),
    STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '')
from tmp
where Data4 > ''
)
INSERT INTO Testdata
select Data1, Data2, Data3, DataItem AS Data4
from tmp
order by Data1

DELETE FROM Testdata
where Data4 like '%-%'

select * FROM TESTDATA

【讨论】:

  • 有什么方法可以让我使用 ssrs 选项获得相同的结果。或者唯一的方法是 SQL。谢谢你的解决方案。
猜你喜欢
  • 2019-10-09
  • 2017-12-29
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多