【问题标题】:SQL remove NULL and RegroupSQL 删除 NULL 并重新组合
【发布时间】:2020-05-20 04:58:07
【问题描述】:

我在 table1 上有数据

ClassA  CountA     ClassB    CountB     ClassC   CountC     Catergory
Test1     2        Test2       1          null     null      Group1
null      null     Test3       2          null     null      Group2
null      null      null       null       Test3     3        Group3

我怎样才能重做可以摆脱 NULL 和 bygroup (group1 = test1, group2 = test2, group3 = test3)

ClassA  CountA    Catgroup1   ClassB    CountB  CatGroup2    ClassC   CountC    Catgroup3
Test1     2        Group1      Test2      1       Group2     Test3      2        Group3
                               Test3      3                                      Group3

【问题讨论】:

  • 到目前为止你尝试过什么?
  • 为什么ClassC有2行而不是ClassB
  • 我真的不知道该怎么做。我只是新手
  • 仅用于数据记录。没有具体的
  • 那么Test3ClassB 发生了什么?解释逻辑。为什么事情会发生变化?

标签: sql sql-server


【解决方案1】:

这是一个真正的痛苦。基本上,您必须独立完成每一列,然后将它们重新组合在一起。

请注意,您不能保留原始顺序,除非您有一列指定顺序。这个想法是为每列中的每个有效值生成一个序列号,并使用full join 将它们重新组合在一起:

select classA.classA, countA.countA, classB.classB, . . . 
from (select classA, row_number() over (order by (select null)) as seqnum
      from t
      where classA is not null
     ) classA full join
     (select countA, row_number() over (order by (select null)) as seqnum
      from t
      where countA is not null
     ) countA
     on classA.seqnum = countA.seqnum full join
     (select classB, row_number() over (order by (select null)) as seqnum
      from t
      where classB is not null
     ) classB
     on classB.seqnum = coalesce(classA.seqnum, countA.seqnum) full join
     . . .
order by seqnum;

【讨论】:

  • 我没有看到按类别列分组
猜你喜欢
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 2021-04-25
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
相关资源
最近更新 更多