mysql - 在mysql中选择值大于0的列和值

标签 mysql

我有两个表。

Name: `table1`
name    d1      d2      d3      d4      d5
Tapan   2       0       3       8       0
another table : `table2`
name    c1      c2      c3      c4      c5      c6
Tapan   12      14      0       0       17      0

两个表中都有 50 多列。 如何获得如下报告:

name    - Tapan
d1      - 2
d3      - 3
d4      - 8
c1      - 12
c2      - 14
c5      - 17
total   - 56

我未能为值>0 且名称 = 'Tapan' 的报告创建 sql 查询

SELECT a.*, b.* 
FROM table1 a 
INNER JOIN table2 b 
ON a.name = b.name

See the SQL Fiddle

我需要获取列值大于 0

的报告

最佳答案

如果您将表格重新设计成这样会更好:

表 1:

Name    Dnum    Dval
Tapan   1       2
Tapan   2       0
Tapan   3       3
Tapan   4       8
Tapan   5       0

表 2:

Name    Cnum    Cval
Tapan   1       12
Tapan   2       14
Tapan   3       0
Tapan   4       0
Tapan   5       17
Tapan   6       0

然后你可以这样查询:

SELECT CONCAT('d', Dnum) AS name, Dval AS Tapan
FROM table1
WHERE Name = 'Tapan' AND Dval > 0
UNION ALL
SELECT CONCAT('c', Cnum) AS name, Cval AS Tapan
FROM table2
WHERE Name = 'Tapan' AND Cval > 0

您也可以像这样组合两个表:

Name    Prefix  Num    Val
Tapan   d       1       2
Tapan   d       2       0
Tapan   d       3       3
Tapan   d       4       8
Tapan   d       5       0
Tapan   c       1       12
Tapan   c       2       14
Tapan   c       3       0
Tapan   c       4       0
Tapan   c       5       17
Tapan   c       6       0

那么查询是:

SELECT CONCAT(prefix, num) AS name, val AS Tapan
FROM yourTable 
WHERE name = 'Tapan' AND val > 0

关于mysql - 在mysql中选择值大于0的列和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47322429/

相关文章:

mysql - curdate() 组上的数据验证错误代码 1111

php - Laravel 中的 JSON 给出错误 SQLSTATE[42000] : check the manual that corresponds to your MariaDB server

php - 如何设置 Node.js、PHP 和 MySQL 的开发环境

Mysql 显示 #1222 - 使用的 SELECT 语句具有不同的列数

php - laravel插入查询中绑定(bind)参数

java - 如何使用多个 OR 动态构建 booleanbuilder 条件

mysql - mysql 触发器编译但在必要时不会触发

mysql - 有没有办法在不同主机上测试您的 MYSQL 数据库速度?

MySQL 到 MSSQL 数据类型传输

MySQL 选择所有具有最小值的子查询行