根据条件垂直分割表格

我目前正在尝试根据年份将一个表垂直拆分为多个表。 我的源表看起来像这样:

源表:

|----------------------|-------------------|
|         data         |        year       |
|----------------------|-------------------|
|          aaa         |         y1        |
|          bbb         |         y1        |
|          ccc         |         y2        |
|          eee         |         y2        |
|----------------------|-------------------|

我想要得到的是:

第1年:

|----------------------|-------------------|
|         data         |        year       |
|----------------------|-------------------|
|          aaa         |         y1        |
|          bbb         |         y1        |
|----------------------|-------------------|

year2

|----------------------|-------------------|
|         data         |        year       |
|----------------------|-------------------|
|          ccc         |         y2        |
|          ddd         |         y2        |
|----------------------|-------------------|

棘手的是,年数各不相同(最多9个不同的年)。这意味着我需要根据年份中唯一值的数量有条件地创建数量不确定的表。我正在使用无法启用IF或SELECT INTO查询的MySQL,这就是为什么我一直努力使其无法正常工作。

tigergao000 回答:根据条件垂直分割表格

您可以使用Stored Procedure

DELIMITER //
CREATE PROCEDURE multiSelect ()
BEGIN
   DECLARE finished INTEGER DEFAULT 0;
   DECLARE selectedYear year;
   DECLARE years CURSOR FOR SELECT DISTINCT year FROM myTable;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
   OPEN years;
     getList: LOOP
          FETCH years INTO selectedYear;
          IF finished = 1 THEN LEAVE getList; END IF;
          SELECT * FROM myTable where year = selectedYear;
      END LOOP getList;
    CLOSE years;
END //
DELIMITER ;

DEMO

使用SP,您可以分别创建LOOPFETCH,以创建1或9年。 您所要做的就是CALL multiSelect();

详细了解SP HERE

本文链接:https://www.f2er.com/3035691.html

大家都在问