【问题标题】:Split Table vertically based on condition根据条件垂直拆分表
【发布时间】:2020-03-20 21:02:14
【问题描述】:

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

源表:

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

我想要得到的是:

第 1 年:

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

第 2 年

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

棘手的部分是,年数各不相同(最多 9 个不同的年份)。这意味着我需要根据列年份中唯一值的数量有条件地创建未定义数量的表。我正在使用不启用 IF 或 SELECT INTO 查询的 MySQL,这就是我努力让它工作的原因。

【问题讨论】:

  • 这只是一个显示问题还是您真的想将表格拆分为多个?在后一种情况下,分区不会有帮助吗?
  • 是后者,但是我一直无法进行分区。
  • @anthony 如果某人的回答解决了您的问题,您可能希望使用大复选框接受它作为答案。否则写下你是怎么解决的。

标签: mysql split conditional-statements


【解决方案1】:

你可以使用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();

阅读更多关于SPHERE

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多