【问题标题】:How to increment a letter per group如何为每组增加一个字母
【发布时间】:2019-04-09 19:00:21
【问题描述】:

我有一个容器列表(超过 2K 行),我想将其拆分为多个比较

Code Name    Compartments
10   10 feet   1 
15   15 feet   1
25   25 feet   2
100  100 feet  3
150  150 feet  2

我做了这个查询来实现这一点

select * 
from Containers c
inner join master.dbo.spt_values b on b.type = 'P' and b.number < c.Compartments

得到

Code Name    Compartments
10   10 feet   1 
15   15 feet   1
25   25 feet   2
25   25 feet   2
100  100 feet  3
100  100 feet  3
100  100 feet  3
150  150 feet  2
150  150 feet  2

现在我想在代码上添加一个自动递增的字母,但每个组都是这样的。

Code Name    Compartments
10A   10 feet   1 
15A   15 feet   1
25A   25 feet   2
25B   25 feet   2
100A  100 feet  3
100B  100 feet  3
100C  100 feet  3
150A  150 feet  2
150B  150 feet  2

我在考虑使用隔间的数量或添加一个标识列来添加 anm 增量 char(64),但我不知道如何使每组增量

select Code + CHAR(Compartments + 64), *  
from Containers c inner join master.dbo.spt_values b on b.type = 'P' and
b.number < c.Compartments

【问题讨论】:

  • 你考虑过使用ROW_NUMBER吗?
  • 你考虑过不这样做吗?老实说,这是一个充满问题的“递增”信。到了 27 岁会发生什么?你现在有AA吗?当 AA 应该排在 Z 之后时,你将如何对它们进行排序?你真的不想要的所有组合怎么样。比如FUJ之后会发生什么?还是在 SEW 之后?你还能做出多少其他 2-3 个字母组合应该排除在外???并且将现有的加上另一个值塞进同一个元组违反了 1NF,应该是两列。

标签: sql-server character auto-increment


【解决方案1】:

这对你有用,但记得在 26 之后检查,这意味着当你到达“Z”时会发生什么。

select Code + CHAR(ROW_NUMBER() OVER(PARTITION BY code ORDER BY name ASC) + 64), *  
from Containers c inner join master.dbo.spt_values b on b.type = 'P' and
b.number < c.Compartments

【讨论】:

  • 这行得通,但正如肖恩指出的那样,这是一个真的糟糕的设计。
猜你喜欢
  • 2018-02-16
  • 2017-08-23
  • 2021-04-15
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
相关资源
最近更新 更多