2

似たような名前でレコードをグループ化する必要がある状況がありますが_QA、名前の最後にあります。

ここに完全な例があります。

という名前のテーブルが 1 つprojectありnameますvarchar(200)

そのテーブルへのエントリの例は次のとおりです。

id = 1
name = Project

id = 2
name= Project_QA

ご覧のとおり、同じ名前のエントリがあり、_QA違いのみがあります。

今、そのテーブルをクエリして両方ProjectProject_QAグループ化し、1 つの同じレコードとしてグループ化します。

私が試したことのために。申し訳ありませんが、何も見つからなかったので、ここで質問しています。

ストアプロシージャは必要ありません。

編集

今、私は受け取った回答に従ってクエリを実行していますが、最終的な問題が1つあります。

これで、作業時間を追跡するという名前のテーブルがありますworking。このテーブルに参加して、合計作業時間の合計を取得するにはどうすればよいですか。

以下のクエリがあります。

SELECT
    SUM(
        ROUND(
            TIME_TO_SEC(
                TIMEDIFF(
                    vv.end_date,
                    vv.start_date
                )
            ) / 3600
        ,2)) AS TotalHour,
    ( select name from project where id=vv.project_id )  AS ProjectName,
    ( select planned_hour from project where id=vv.project_id )  AS ProjectPlannedHour
FROM
    working vv
WHERE
    vv.project_id in(select id from project)
GROUP BY
    vv.project_id,
    IF(SUBSTR(ProjectName, -3)='_QA', LEFT(ProjectName, CHAR_LENGTH(ProjectName)-3), ProjectName)
ORDER BY
    TotalHour DESC
LIMIT 0, 100
4

1 に答える 1

4

これは、文字列関数を使用すると非常に簡単です。

SELECT 
  * 
FROM 
  project 
GROUP BY 
  IF(SUBSTR(name, -3)='_QA', LEFT(name, CHAR_LENGTH(name)-3), name);

-フィドルデモ

于 2013-09-19T10:02:35.783 に答える