MySQL Select Query 生成动态列结果

2023-12-14

我需要编写一个动态返回列的查询。例如,我有一个包含列的表 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;

它返回我,

enter image description here

上面的结果是按照我的要求,但在我的情况下,上面数据中的类型现金、卡、支票等不是预定义的,它们可能是动态出现的,那么我如何管理它,请帮助我为此构建动态列 SQL。

提前致谢..


你需要使用动态枢轴

创建您的pivot动态查询。

主要步骤如下

  1. 声明一个变量@sql携带你的SUM功能和CASW WHEN表达
  2. use CONCAT结合你的SUM功能和CASW WHEN表达式字符串和mainselect string.
  3. use 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;

Result

    Name    Cash    Card    Cheque
1   Payment 300     NULL    400
2   Receipt 200      350    250

SQL小提琴

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL Select Query 生成动态列结果 的相关文章

随机推荐

  • ASP.NET MVC 本地化

    我正在尝试通过路线实现本地化 我有以下内容 routes MapRoute DefaultLocalized lang controller action id new controller Home action Index id lan
  • 使用 mysql 中的递归 php 创建数组

    我需要从像这样组织的 mysql 数据库创建一个数组 id description parentId 1 Level 1 0 2 Level 2 0 3 Level 1a 1 4 Level 1b 1 5 Level 1a1 3 6 Lev
  • jQuery 动画背景位置在块中?

    我正在尝试使用 jQuery 使跨度的背景位置每秒下降 10 像素 有什么好的方法可以做到这一点 我一直在玩 jQuery animate delay CSS 等setTimeout功能 但我无法让任何东西工作 非常感谢建议 我试图使 y
  • gitlab-shell:不允许的命令

    我已经在 Ubuntu 14 04 上安装了最新版本的 GitLab 除了推送到远程之外它工作正常 Running ssh email protected git receive pack repo git 效果很好 在 gitlab sh
  • ASP.NET MVC5 占位符中的字体很棒

    我正在尝试向登录页面的占位符添加一个字体很棒的图标 这是我到目前为止所拥有的 我不知道如何获得字体很棒的图标inside文本框 作为占位符 Html TextBoxFor m gt m UserName new class form con
  • XElement.Load 读取 & 符号和特殊国家/地区字符时出错

    我在从 XML 文件读取 符号时遇到问题 XElement xmlElements XElement Load Path Xml Data File 当我有以下情况时 我会收到错误
  • 在下拉列表打开时更改其内容?

    我有一个包含一些项目的下拉列表 当用户选择其中之一时 我希望下拉列表保持打开状态并重新填充新项目 然后用户选择其中之一 最后下拉菜单关闭 可以用 JavaScript 完成吗 如果是这样 怎么办 为了科学 我创建了一个替代答案来测试这一点
  • 如何在xmppGroupCoreDataStorageObject中保存和获取?

    Using xmpp messenger ios 我已经创建了组并设置了其配置并将用户添加到其中 然后我想将该组添加到xmppGroupCoreDataStorageObject存储以将其列出到 OpenChatViewController
  • UITextField 边框颜色

    我非常希望将自己的颜色设置为 UITextField 边框 但到目前为止我只能找到如何更改边框线样式 我使用背景属性以这种方式设置背景颜色 self textField backgroundColor textFieldColor 但我也必
  • pip/python:普通站点包不可写

    我有一台新 Macbook 一个用户安装了它 然后我安装了一个新用户 我的 授予管理员权限并删除了旧用户 我在 Catalina 操作系统上 自从安装以来 我一直遇到一些权限问题 VSCode 找不到 Jupyter Notebook pi
  • 获取 Google Cloud Storage 中的文件列表 (Appengine PHP)

    我有一个 Google Cloud Storage 存储桶 MyBucket 它有 20 个项目 我想在我的 appengine PHP 应用程序中获取这些文件名 我正在考虑是否可以使用 App Engine 的内置 Google Clou
  • 正则表达式帮助 - python - 从 css 中提取所有图像 url

    我正在尝试从 css 文件中提取所有图像 jpg png gif uri 示例 CSS blockpricecont width 660px height 75px background url images postBack jpg re
  • 使用画布nodeJS模糊图像

    这好像是ctx filter blur amount 不起作用 这是我的代码 const body await request get url const data await Canvas loadImage body ctx filte
  • 在c#中通过位掩码存储多个值

    我试图通过位掩码将四个独立的 5 位值 0 31 存储在 32 位 int 内 但无法正确设置这些值 并从用于存储的掩码 int 中获取各个值 谁能帮我这个 Edit 抱歉外部链接 这里有一些 JavaScript 演示了我想要实现的目标
  • 如何在 ASP.NET Core 6 中将字段值从 true 切换为 false,反之亦然

    我正在使用 ASP NET Core 6 和 mongodb 作为数据库构建一个 API 我正在尝试设置某个字段以从 true 切换到 false 反之亦然 如果场isactive True 然后我必须将其更新为 false 反之亦然 我已
  • 解析apache日志文件

    我刚刚开始学习 Python 想读取 Apache 日志文件并将每行的部分内容放入不同的列表中 文件中的行 172 16 0 3 25 Sep 2002 14 04 19 0200 GET HTTP 1 1 401 Mozilla 5 0
  • Cassandra:插入 timeuuid 错误

    我有下表 create table test userId varchar notifId timeuuid notification varchar time bigint read boolean primary key userId
  • 带有 FileSystemWatcher 和 Timer 的 Windows 服务 - 确保所有内容都得到处理

    我创建了一个 C Windows 服务应用程序来启动FileSystemWatcher监视目录中文件的创建 找到文件后 我实例化一个自定义类 该类解析文件 CSV 并使用其内容调用 Web 服务 该服务在某种程度上是异步的 并返回一个唯一的
  • 使用 SUDS 时添加 xsi:type 和信封命名空间

    我需要与 SOAP 服务交互 但这样做遇到了很多麻烦 非常感谢对此的任何指示 原来的错误信息是 org apache axis2 databinding ADBException Any type element type has not
  • MySQL Select Query 生成动态列结果

    我需要编写一个动态返回列的查询 例如 我有一个包含列的表 tblTest Id Name Type Amount 1 Receipt Cash 100 2 Receipt Card 200 3 Receipt Cheque 250 4 Re