mysql 动态查询_MySQL选择查询以生成动态列结果

我需要编写一个查询,以动态返回列.例如,我有一个带有列的表tblTest:

Id, Name, Type, Amount

1, Receipt, Cash 100

2, Receipt, Card 200

3, Receipt, Cheque 250

4, Receipt, Card 150

5, Receipt, Cash 100

6, Payment, Cash 300

7, Payment, Cheque 400

SQL查询:

SELECT

Name,

SUM(CASE WHEN Type = 'Cash' THEN Amount ELSE 0 END) Cash,

SUM(CASE WHEN Type = 'Card' THEN Amount ELSE 0 END) Card,

SUM(CASE WHEN Type = 'Cheque' THEN Amount ELSE 0 END) Cheque

FROM tblTest

GROUP BY

Name;

它返回我,

TPjme.png

以上结果是根据我的要求,但在我的情况下,上述数据中的Cash,Card,Cheque等类型不是预定义的,可能是动态产生的,那么我该如何管理它,请帮我建立动态列SQL.

提前致谢..

解决方法:

您需要使用动态数据透视

动态创建您的数据透视查询.

主要步骤如下

>声明一个变量@sql以携带SUM函数和CASW WHEN表达式

>使用CONCAT组合SUM函数和CASW WHEN表达式字符串和主选择字符串.

>使用EXECUTE函数动态执行SQL.

看起来像这样.

SET @sql = NULL;

SELECT

GROUP_CONCAT(DISTINCT

CONCAT(

'SUM(CASE WHEN Type =''',

Type,

''' THEN Amount END) AS ',

Type

)

) INTO @sql

FROM tblTest;

SET @sql = CONCAT('SELECT

Name,', @sql, '

FROM tblTest

GROUP BY

Name;');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

结果

Name Cash Card Cheque

1 Payment 300 NULL 400

2 Receipt 200 350 250

标签:case-when,aggregate-functions,pivot-table,sql,mysql

来源: https://codeday.me/bug/20191025/1925775.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值