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;
它返回我,
以上结果是根据我的要求,但在我的情况下,上述数据中的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