是否可以遍历这样的表:
mysql> select * from`stackoverflow`.`结果`;
+ -------------- + --------- + ------------- + -------- +
| ID | TYPE | CRITERIA_ID | 结果
+ -------------- + --------- + ------------- + -------- +
| 1 | 汽车| env | 1 |
| 2 | 汽车| 煤气| |
| 3 | 汽车| 年龄| |
| 4 | 自行车| env | 1 |
| 5 | 自行车| 煤气| |
| 6 | 自行车| 年龄| 1 |
| 7 | 巴士| env | 1 |
| 8 | 巴士| 煤气| 1 |
| 9 | 巴士| 年龄| 1 |
+ -------------- + --------- + ------------- + -------- +
设置9行(0.00秒)
变成这个:
+ ------ + ----- + ----- + ----- +
| TYPE | env | 煤气| 年龄|
+ ------ + ----- + ----- + ----- +
| 汽车| 1 | | |
| 自行车| 1 | | 1 |
| 巴士| 1 | 1 | 1 |
+ ------ + ----- + ----- + ----- +
目的是选择所有CRITERIA_ID
s并将它们用作列。作为行,我喜欢使用所有TYPE
s。
SELECT distinct(CRITERIA_ID) FROM stackoverflow.Results;
SELECT distinct(TYPE) FROM stackoverflow.Results;
但是如何将它们组合成一个视图或某物。像这样?
如果您喜欢玩数据。这是生成表的脚本:
CREATE SCHEMA `stackoverflow`;
CREATE TABLE `stackoverflow`.`Results` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`TYPE` varchar(50) NOT NULL,
`CRITERIA_ID` varchar(5) NOT NULL,
`RESULT` bit(1) NOT NULL,
PRIMARY KEY (`ID`)
)
ENGINE=InnoDB;
INSERT INTO `stackoverflow`.`Results`
(
`ID`,
`TYPE`,
`CRITERIA_ID`,
`RESULT`
)
VALUES
( 1, "car", env, true ),
( 2, "car", gas, false ),
( 3, "car", age, false ),
( 4, "bike", env, true ),
( 5, "bike", gas, false ),
( 6, "bike", age, true ),
( 7, "bus", env, true ),
( 8, "bus", gas, true ),
( 9, "bus", age, true );
不幸的是,MySQL没有PIVOT
您基本上想做的功能。因此,您将需要在CASE
语句中使用聚合函数:
SELECT type,
sum(case when criteria_id = 'env' then result end) env,
sum(case when criteria_id = 'gas' then result end) gas,
sum(case when criteria_id = 'age' then result end) age
FROM results
group by type
参见带有演示的SQL Fiddle
现在,如果您要动态执行此操作,这意味着您不知道要转置的列的提前时间,那么您应该查看以下文章:
动态数据透视表(将行转换为列)
您的代码如下所示:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(CRITERIA_ID = ''',
CRITERIA_ID,
''', RESULT, NULL)) AS ',
CRITERIA_ID
)
) INTO @sql
FROM
Results;
SET @sql = CONCAT('SELECT type, ', @sql, ' FROM Results GROUP BY type');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
参见带有演示的SQL Fiddle
问题内容: 我想选择列名,但我不知道表结构是否会提前更改,因此它可能会发生变化,因此我不能只对带有列名的select语句进行硬编码。我也不想选择每一列。有没有简单的方法可以做到这一点? 我的想法是这两个查询的某种组合,但是我的SQL并不是那么好。 我尝试使用子选择,但没有用。似乎什么都没发生,我没有收到错误,只是没有结果 也许我需要参加吗?..无论如何,任何帮助都将是很大的,谢谢 问题答案: 试试
问题内容: 我知道这个问题已经被问过很多次了,但是我已经尝试了好几个小时,却没有任何效果,我是php和ajax的新手,所以,我可能会遗漏一个我不知道的小东西,我想要在这里实现的目的是,我希望用户选择一个食物组,然后基于该组显示配料表。 我单独测试了process.php文件,它运行良好,还测试了脚本,发生了什么事,当我注释掉并键入alert(parent)时,从$ .ajax开头的行不起作用了,我
问题内容: 我是MSSQL用户,现在将数据库转换为MySQL。我在MySQL中编写以下查询: 我得到以下错误 如何用MySQL正确编写这样的查询? 问题答案: 使用CREATE TABLE SELECT语法。 http://dev.mysql.com/doc/refman/5.0/en/create-table- select.html
我有一些动态创建新div(表单内部的输入)的JS。它工作得很好。我还有一些jquery,它检查下拉输入,如果单击特定的选择,它会显示一个单独的div。它工作得很好。 如果我试图使用jquery在一个动态创建的div中显示一个单独的div,那么它将不起作用。它的第一个实例确实有效,但动态创建的实例都无效。在四处搜索之后,看起来我需要一个代表团,但我似乎无法针对我的具体情况找到它。 JSFIDLE:h
我有一个选择元素,里面有多个选项: 对于这里看到的每个选项元素,我都有另一个select元素。基本上,我在一个选择元素中列出了一系列音乐流派,在它下面,是与每一个“主流派”相关的子流派。 我想做的是使子体裁只有在相对体裁被选中时才可见。例如,如果用户选择“Pop”,我想向他们显示包含Pop子类型的相关选择字段。 我的HTML标记实际上是由WordPress插件生成的,不幸的是,我无法编辑它。也就是
问题内容: 我正在使用c#中的linq查询遇到一个问题,我的linq查询如下 我有一个 perfmon 类,它包含诸如(id,counter1,counter2 …)之类的属性,现在有20多个计数器,我已经开发了sql查询以根据参数中传递的计数器名称选择id和计数器,例如,如果我已经传递了counter1,它将仅选择id,counter1(重命名为counter) 如果我将在这里使用开关盒,那么它