将字符串与出现次数连接起来 [英] Concatenate string with the number of ocurrence

查看:62
本文介绍了将字符串与出现次数连接起来的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将数据库从一个应用程序迁移到另一个应用程序.在第一个我有两个表:proyectos 和 presupuestos.'proyectos' 中的一行可以在 'presupuestos' 中包含一行或多行.新应用程序在 presupuestos 中有一个字段,该字段将项目的代码与该项目的presupuesto"编号连接起来.这就是我不知道该怎么做.

I'm migrating a database from one application to another. In the first one I've two tables: proyectos and presupuestos. A row in 'proyectos' can have one or more rows in 'presupuestos'. The new application has a field in presupuestos that is made concatenating the code of the proyect with the number of 'presupuesto' of this proyect. That's what I don't know how to do it.

我的表是这样的:项目:

My tables are like: Proyectos:

+--------------+------------------+
| proyectos_id | proyectos_codigo |
+--------------+------------------+
|            1 | E+-00001         |
|            2 | E+-00002         |
|            3 | E+-00003         |
|            4 | E+-00004         |
|            5 | E+-00005         |
+--------------+------------------+

前提:

+-----------------+--------------+
| presupuestos_id | proyectos_id |
+-----------------+--------------+
|               1 |            1 |
|               2 |            1 |
|               3 |            1 |
|               4 |            2 |
|               5 |            3 |
|               6 |            3 |
|               7 |            3 |
|               8 |            4 |
|               9 |            4 |
|              10 |            5 |
+-----------------+--------------+

我试过这个查询:

select presupuestos_id, p.proyectos_id, concat(pr.proyectos_codigo,'_1') from presupuestos p join proyectos pr on p.proyectos_id = pr.proyectos_id

结果是:

+-----------------+--------------+----------------------------------+
| presupuestos_id | proyectos_id | concat(pr.proyectos_codigo,'_1') |
+-----------------+--------------+----------------------------------+
|               1 |            1 | E+-00001_1                       |
|               2 |            1 | E+-00001_1                       |
|               3 |            1 | E+-00001_1                       |
|               4 |            2 | E+-00002_1                       |
|               5 |            3 | E+-00003_1                       |
|               6 |            3 | E+-00003_1                       |
|               7 |            3 | E+-00003_1                       |
|               8 |            4 | E+-00004_1                       |
|               9 |            4 | E+-00004_1                       |
|              10 |            5 | E+-00005_1                       |
+-----------------+--------------+----------------------------------+

但显然,这不是我想要的.我想要的结果是:

But obviusly, It doesn't what I want. My desired result is:

+-----------------+--------------+----------------------------------+
| presupuestos_id | proyectos_id | some code                        |
+-----------------+--------------+----------------------------------+
|               1 |            1 | E+-00001_1                       |
|               2 |            1 | E+-00001_2                       |
|               3 |            1 | E+-00001_3                       |
|               4 |            2 | E+-00002_1                       |
|               5 |            3 | E+-00003_1                       |
|               6 |            3 | E+-00003_2                       |
|               7 |            3 | E+-00003_3                       |
|               8 |            4 | E+-00004_1                       |
|               9 |            4 | E+-00004_2                       |
|              10 |            5 | E+-00005_1                       |
+-----------------+--------------+----------------------------------+

推荐答案

试试这个:

SELECT presupuestos_id, p.proyectos_id, 
    CONCAT(pr.proyectos_codigo,'_',
        (CASE p.proyectos_id
        WHEN @p_id
        THEN @rownumber := @rownumber + 1
        ELSE @rownumber := 1 AND @p_id := p.proyectos_id END)
    )AS result
FROM presupuestos p 
JOIN proyectos pr ON p.proyectos_id = pr.proyectos_id
JOIN (SELECT @rownumber:=0, @p_id:='') AS t

这篇关于将字符串与出现次数连接起来的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆