Mysql 使用SQL生成字符串

Mysql 使用SQL生成字符串,mysql,sql,Mysql,Sql,样本表 解释 我有一个简单的数据库模式,如左图所示。我需要使用SQL根据这些值生成给定名称列。我已经知道了如何CONCATtype,num,但是我不知道如何生成正确的字母。我知道类似的事情在SQL中是可能的,因为我很久以前就做过类似的事情 编号方案 对于每个用户,当找到更多具有相同num和类型的行时,字母应该从A-Z开始前进。不会有超过26行,因此处理这一行不是问题 我想我可以先生成数字,即1,2,3,而不是A,B,C,然后再从[A..Z]中选择1,我只是不知道如何在MySQL中实现这一点 更新

样本表

解释

我有一个简单的数据库模式,如左图所示。我需要使用SQL根据这些值生成给定名称列。我已经知道了如何CONCATtype,num,但是我不知道如何生成正确的字母。我知道类似的事情在SQL中是可能的,因为我很久以前就做过类似的事情

编号方案 对于每个用户,当找到更多具有相同num和类型的行时,字母应该从A-Z开始前进。不会有超过26行,因此处理这一行不是问题

我想我可以先生成数字,即1,2,3,而不是A,B,C,然后再从[A..Z]中选择1,我只是不知道如何在MySQL中实现这一点

更新


我想你正在寻找这样的东西:

SELECT
  id, user, num, type, seq
FROM (
SELECT
  sample.*,
  @row:= case when @lst_type=type
                   and @lst_user=user
                   and @lst_num=num then @row+1 else 65 end,
  CONCAT(type, num, CHAR(@row)) seq,
  @lst_type:=type,
  @lst_user:=user,
  @lst_num:=num
FROM sample, (select @lst_type:=null,
                     @lst_user:=null,
                     @lst_num:=null, 
                     @row:=65) r
ORDER BY id
) s

请看小提琴。

我想你在找这样的东西:

SELECT
  id, user, num, type, seq
FROM (
SELECT
  sample.*,
  @row:= case when @lst_type=type
                   and @lst_user=user
                   and @lst_num=num then @row+1 else 65 end,
  CONCAT(type, num, CHAR(@row)) seq,
  @lst_type:=type,
  @lst_user:=user,
  @lst_num:=num
FROM sample, (select @lst_type:=null,
                     @lst_user:=null,
                     @lst_num:=null, 
                     @row:=65) r
ORDER BY id
) s

请参阅fiddle。

您能提供更多样本数据吗?你还会有Q3A、B和C吗?分配字母的逻辑是什么?从你的例子来看,这并不明显。| 11 | 1 | 2 | Q | | Q3A |?@DoSparKot typo,edited你能提供更多的样本数据吗?你还会有Q3A、B和C吗?分配字母的逻辑是什么?从你的例子来看,这并不明显。| 11 | 1 | 2 | Q | Q3A |?@DoSparKot typo,编辑+1-即使这不是OP想要的,谁知道呢?喜欢使用字符!是的,这个答案提供了很多见解,但我不小心遗漏了一个细节,这使得这个解决方案不太管用:@sgedes谢谢:我很久没有使用CHAR:@parker.sik了,我看到你已经更新了你的问题,现在我不明白其中的逻辑。。。为什么是Q2A,Q2B,然后是Q3A?@parker.sikand好吧,这是一个打字错误,现在我得到了+1-即使这不是OP想要的,谁知道呢?喜欢使用字符!是的,这个答案提供了很多见解,但我不小心遗漏了一个细节,这使得这个解决方案不太管用:@sgedes谢谢:我很久没有使用CHAR:@parker.sik了,我看到你已经更新了你的问题,现在我不明白其中的逻辑。。。为什么是Q2A,Q2B,然后是Q3A?@parker.sikand好吧,这是个打字错误,现在我明白了
SELECT
  id, user, num, type, seq
FROM (
SELECT
  sample.*,
  @row:= case when @lst_type=type
                   and @lst_user=user
                   and @lst_num=num then @row+1 else 65 end,
  CONCAT(type, num, CHAR(@row)) seq,
  @lst_type:=type,
  @lst_user:=user,
  @lst_num:=num
FROM sample, (select @lst_type:=null,
                     @lst_user:=null,
                     @lst_num:=null, 
                     @row:=65) r
ORDER BY id
) s