如何从查询动态创建列名?

时间:2019-01-12 07:11:03

标签: mysql

我有两个桌子。

CREATE TABLE `binnat` (
  `binNu` varchar(2) NOT NULL,
  `binNa` varchar(30) NOT NULL,
  `seq` char(2) NOT NULL,
  `se` tinyint(2) unsigned DEFAULT NULL COMMENT 'test sequence\n',
  `W_id` tinyint(2) unsigned NOT NULL,
  `W_lt_id` varchar(15) NOT NULL,
  `W_lt_lpt_id` smallint(4) unsigned NOT NULL,
  PRIMARY KEY (`binNu`,`binNa`,`W_id`,`W_lt_id`,`W_lt_lpt_id`),
  KEY `fk_binNaT_W1_idx` (`W_id`,`W_lt_id`,`W_lt_lpt_id`),
  CONSTRAINT `fk_binNaT_W1` FOREIGN KEY (`W_id`, `W_lt_id`, `W_lt_lpt_id`) REFERENCES `w` (`id`, `lt_id`, `lt_lpt_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `binv` (
  `value` double DEFAULT NULL,
  `binNaT_binNu` varchar(2) NOT NULL,
  `binNaT_binNa` varchar(30) NOT NULL,
  `binNaT_W_id` tinyint(2) unsigned NOT NULL,
  `binNaT_W_lt_id` varchar(15) NOT NULL,
  `binNaT_W_lt_lpt_id` smallint(4) unsigned NOT NULL,
  PRIMARY KEY (`binNaT_binNu`,`binNaT_binNa`,`binNaT_W_id`,`binNaT_W_lt_id`,`binNaT_W_lt_lpt_id`),
  CONSTRAINT `fk_binV_binNaT1` FOREIGN KEY (`binNaT_binNu`, `binNaT_binNa`, `binNaT_W_id`, `binNaT_W_lt_id`, `binNaT_W_lt_lpt_id`) REFERENCES `binnat` (`binnu`, `binna`, `w_id`, `w_lt_id`, `w_lt_lpt_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我进行了查询以检索结果。就是这个。

SELECT binnat.W_id, binnat.binna, binv.value
FROM binnat INNER JOIN binv ON (binnat.W_lt_id = binv.binNaT_W_lt_id) AND (binnat.W_id = binv.binNaT_W_id) AND (binnat.binNa = binv.binNaT_binNa) AND (binnat.binNu = binv.binNaT_binNu)
WHERE (((binv.binNaT_W_lt_id) Like "SI06840"))
GROUP BY binnat.se, binnat_W_id, binv.value, binnat.binnu, binnat.binna

当我执行它时,我得到了这个结果。

W_id     binNa       value
1         abc          20
2         abc          30
1         def          70
2         def          50

但是我发现结果不是我想要的。我想要的结果是,

W_id     abc     def
1        20       70
2        30       50

我认为我需要代码来根据我的查询动态创建列名。我在这里找到了可以帮助我的代码。看起来像

SET @sql = null;
SELECT GROUP_CONCAT(DISTINCT
            CONCAT('MAX(IF(binnat.W_id = ', 
            W_id, 
            ', binnat.binNa, NULL)) AS `',
            binna,'`'
            )
            ) INTO @sql FROM `***mytable***`;

SET @sql = CONCAT('SELECT id, ', @sql, ' 
                  FROM ***mytable*** 
                  GROUP BY id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

但是代码使用“ FROM”短语中的表,而不使用查询。我想知道如何使用查询代码代替上面的代码中的“ mytable”。

谢谢。

0 个答案:

没有答案