SQL 查询用于在 SQL Server 中生成类似输出查询相关表的矩阵

2023-12-31

我有三张桌子:
Product

ProductID   ProductName  
1           Cycle  
2           Scooter  
3           Car  

Customer

CustomerID  CustomerName  
101         Ronald  
102         Michelle  
103         Armstrong  
104         Schmidt  
105         Peterson   

交易

TID   ProductID CustomerID TranDate   Amount  
10001 1         101        01-Jan-11  25000.00  
10002 2         101        02-Jan-11  98547.52  
10003 1         102        03-Feb-11  15000.00  
10004 3         102        07-Jan-11  36571.85  
10005 2         105        09-Feb-11  82658.23  
10006 2         104        10-Feb-11  54000.25  
10007 3         103        20-Feb-11  80115.50  
10008 3         104        22-Feb-11  45000.65  

我编写了一个查询来对事务进行分组,如下所示:

SELECT P.ProductName AS Product,  
       C.CustName AS Customer,  
       SUM(T.Amount) AS Amount  
FROM   Transactions AS T  
       INNER JOIN Product AS P  
            ON  T.ProductID = P.ProductID  
       INNER JOIN Customer AS C  
            ON  T.CustomerID = C.CustomerID  
WHERE T.TranDate BETWEEN '2011-01-01' AND '2011-03-31'   
GROUP BY  
       P.ProductName,  
       C.CustName  
ORDER BY  
       P.ProductName  

结果如下:

Product Customer   Amount  
Car     Armstrong  80115.50  
Car     Michelle   36571.85  
Car     Schmidt    45000.65  
Cycle   Michelle   15000.00  
Cycle   Ronald     25000.00  
Scooter Peterson   82658.23  
Scooter Ronald     98547.52  
Scooter Schmidt    54000.25  

我需要矩阵形式的查询结果,如下所示:

Customer  |------------ Amounts ---------------         
Name      |Car      Cycle     Scooter  Totals
Armstrong  80115.50 0.00      0.00     80115.50  
Michelle   36571.85 15000.00  0.00     51571.85  
Ronald     0.00     25000.00  98547.52 123547.52  
Peterson   0.00     0.00      82658.23 82658.23  
Schmidt    45000.65 0.00      54000.25 99000.90  

请帮助我在 SQL Server 2005 中实现上述结果。使用多个视图甚至临时表对我来说都很好。


您可以使用 SQL Server 的PIVOT http://msdn.microsoft.com/en-us/library/ms177410.aspx操作员

SELECT  *
FROM    (
          SELECT  P.ProductName
                  , C.CustName
                  , T.Amount
          FROM    Transactions AS T  
                  INNER JOIN Product AS P ON  T.ProductID = P.ProductID  
                  INNER JOIN Customer AS C ON  T.CustomerID = C.CustomerID  
          WHERE   T.TranDate BETWEEN '2011-01-01' AND '2011-03-31'   
        ) s
PIVOT   (SUM(Amount) FOR ProductName IN ([Car], [Cycle], [Scooter])) pvt

测试数据

;WITH q AS (
  SELECT  [Product] = 'Car', [Customer] = 'Armstrong', [Amount] = 80115.50
  UNION ALL SELECT 'Car', 'Michelle', 36571.85  
  UNION ALL SELECT 'Car', 'Schmidt', 45000.65  
  UNION ALL SELECT 'Cycle', 'Michelle', 15000.00  
  UNION ALL SELECT 'Cycle', 'Ronald', 25000.00  
  UNION ALL SELECT 'Scooter', 'Peterson', 82658.23  
  UNION ALL SELECT 'Scooter', 'Ronald', 98547.52  
  UNION ALL SELECT 'Scooter', 'Schmidt', 54000.25  
)
SELECT  Customer
        , Car = ISNULL(Car, 0)
        , Cycle = ISNULL(Cycle, 0)
        , Scooter = ISNULL(Scooter, 0)
        , Total = ISNULL(Car, 0) + ISNULL(Cycle, 0) + ISNULL(Scooter, 0)
FROM    (
          SELECT  *
          FROM    q
        ) s
PIVOT   (SUM(Amount) FOR Product IN ([Car], [Cycle], [Scooter])) pvt

Output

Customer   Car       Cycle     Scooter   Total
Armstrong  80115.50  0.00      0.00      80115.50
Michelle   36571.85  15000.00  0.00      51571.85
Peterson   0.00      0.00      82658.23  82658.23
Ronald     0.00      25000.00  98547.52  123547.52
Schmidt    45000.65  0.00      54000.25  99000.90
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 查询用于在 SQL Server 中生成类似输出查询相关表的矩阵 的相关文章

  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 为什么 SqlClient 在传递 SqlXml 时使用不必要的 XML 转换?

    我有一个关于从 C 代码将 xml 数据类型传递给查询的问题 首先 这是 SQL Server 上的一个表 CREATE TABLE dbo XmlTable id int IDENTITY 1 1 NOT NULL dat xml NOT
  • 初级SQL部分:避免重复表达式

    我对 SQL 完全陌生 但我们可以说StackExchange 数据浏览器 https data stackexchange com 我只想按信誉列出前 15 位用户 我写了这样的内容 SELECT TOP 15 DisplayName I
  • 如何 md5 所有列(无论类型如何)

    我想创建一个 sql 查询 或 plpgsql 它将 md5 所有给定的行 无论类型如何 但是 在下面 如果 1 为空 则哈希为空 UPDATE thetable SET hash md5 accountid accounttype cre
  • 自加入表

    我有一张像这样的桌子 Employee name salary a 10000 b 20000 c 5000 d 40000 我想获取所有工资高于A工资的员工 我不想使用任何嵌套或子查询 在采访中被问及并暗示是使用自连接 我真的不知道如何实
  • 月份增量查询

    我想通过添加 1 个月来更新数据库中的月份 但我不知道如何在以下存储过程查询中添加月份 我不擅长 sql 请检查它 ALTER PROCEDURE dbo ChangePassword password varchar 20 epasswo
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 如何使用sql作为xml路径('')但保留回车符

    我有下面的代码 select select cast Narrative as Varchar max char 13 from officeclientledger where ptmatter matter and ptTrans 4
  • 为什么我的 CASE 语句要求 THEN 部分的数据类型为 INT?

    我正在尝试运行一个查询 其中以下 CASE 语句是其中一行 我正在使用报表生成器 3 0 但是 我收到一条错误消息 将 varchar 值 Case 1 转换为 int 数据类型时转换失败 Microsoft SQL Server 错误 2
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架
  • Visual Studio 2010 中的数据库设计器

    我需要创建一个全新的 Sql Server 2008 数据库 并希望使用 Visual Studio 2010 Ultimate 中的数据库项目 我已经创建了该项目并在下面添加了一个表格dbo架构 桌子 sql仅以纯文本形式显示 但带有颜色
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 SQL Server 中,如果主键是 GUID,如何按插入顺序对表行进行排序?

    我开始在主键中使用 GUID 而不是自动增量整数 然而 在开发过程中 我习惯于查询 从 SQL Management Studio 或 Visual Studio 数据库 以查看我的应用程序刚刚插入的记录 并且我对无法按主键 desc 顺序

随机推荐

  • jdbc 驱动程序“org.gjt.mm.mysql.Driver”的用途是什么?

    在接手一位同事的项目后 我注意到他使用 org gjt mm mysql Driver 作为 MySQL 5 的 jdbc 驱动程序 而不是更常见的 com mysql jdbc Driver 它们都包含在我在 Maven 中心找到的驱动程
  • 员工 ID 的标准正则表达式

    我需要员工的标准正则表达式就像 EMP015 015EMP EMP 015 E 015 EMP 015 EMP VIS EMP 056 基本上应该允许 or or or 字母数字字符之间 状况 第一个字符不应该是 or or or 员工 I
  • 如何按单元格中的第一个字符过滤范围?

    如果 cell Text 以 A 开头 我想按 column1 过滤 multipleColumnRange rng01 Columns 1 AutoFilter Field 1 Criteria1 firstCharacter A Vis
  • 与正常模式下正确设置的回车符相比,为什么 fprintf 在文本模式下的行为不同?

    下面的问题与其说是一个问题 不如说是一个好奇心 我绊倒了这个问题 https stackoverflow com q 6536599 2605073 提供了两个似乎相同的不同答案 但他们不是 这让我思考 想象一个system调用会回显两行
  • 在 Windows 机器上运行 python 与在 Linux 上运行 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对学习 python 很感兴趣 但我的 Linux 技能很糟糕 我想使用 python 和 django 开发一个中型到大型 Web
  • 获取 R 中向量每 10 步的平均值[重复]

    这个问题在这里已经有答案了 我有一个值向量 1 0 0 4 1 0 0 1 1 1 0 1 0 0 2 0 0 17 1 2 0 2 0 1 1 1 0 1 1 0 0 0 0 0 33 0 2 0 4 2 0 0 1 1 0 0 0 1
  • Graphite只会显示过去24小时的数据

    以下是过去 24 小时的统计数据显示 在 Graphite Composer 中 以下是 过去 14 天 的统计数据显示 那里没有太大区别 我无法说服 Graphite 显示过去 24 小时内任何时间段的任何数据 以下是来自的相关条目sto
  • Google API Gateway:在标头中提供 API 密钥

    我正在尝试设置 Google API Gateway 以使用调用者在标头中发送的 API 密钥 我的 api 配置 yaml 如下所示 securityDefinitions api key header type apiKey name
  • PyLint 无法识别 cv2 成员

    我正在 opencv 项目上运行 pylint 并且在 VS 代码中收到许多有关成员不存在的 pylint 错误 示例代码 import cv2 cv2 imshow 得到的错误 不过 代码运行正确 没有任何错误 版本 pylint 1 8
  • GIT Xcode - 更改原点

    如何更改 GIT 存储库中的原始 url 我不想添加新的存储库 我想换旧的 请帮帮我 我找到了添加新选项但不更改现有选项的选项 Thanks 我认为你不能从 XCode4 中做到这一点 就像许多其他事情一样 Do git remote se
  • 使用下拉菜单创建虚线图

    您好 我有一个 excel 文件 如下所示 其中有三个不同的服务器 A B C 我正在尝试构建一个带有下拉菜单的仪表板应用程序 可以选择所需的服务器并显示每个服务器的 CPU 使用情况和内存使用情况的图表 我尝试从 Dash 官方网站修改以
  • 使用按钮清除多选(角primeng涡轮表)

    是否可以通过按钮远程清除多选 或多个多选 我正在使用 primeng multiselect 和 Turbo table 我已经多次看到这个问题 但没有选择答案 以下是我的多选 span span
  • 如何在yii2中进行ajax调用?

    在 yii 1 14 版本中我们使用 CHtml ajax链接 对于 ajax 调用 在 yii2 中怎么样 你可以像这样创建一个ajax链接 Html a Your Link name controller action title gt
  • 缺少带有 .otf 的内容类型标头字体

    我使用 Laravel 框架 但是在 chrome 控制台中发生了这个错误并且font family不工作 无法加载资源 服务器响应状态为 500 缺少 Content Type 标头 In css font face font famil
  • 使用 PyDrive 上传 XLSX 并将其转换为 Google Sheets

    我正在尝试将 xlsx 文件上传到 Google 云端硬盘 我可以上传它 但是 当我们尝试在云端硬盘中打开同一文件时 必须使用 Google 表格打开它 因此 它会创建一个同名的新文件并消耗驱动器空间 我想我需要在上传时更改 MimeTyp
  • 不同IPC机制的使用

    我是一名 C 程序员 我想知道一个实时场景 我们可以使用不同的 IPC 机制 例如 PIPE 命名 共享内存 我大致知道在哪里可以使用套接字和消息队列 但对于 PIPE Named PIPE 和共享内存我没有任何想法 这只是为了了解不同的
  • 如何将elasticquery转换为kibana URL

    我正在使用 kibana 6 仪表板来显示可视化 我有一个如下所示的弹性查询 它需要传入 kibana 仪表板 URL query bool minimum should match 1 should match phrase jt tax
  • 带 VCL 样式的 Inno Setup 语言选择器

    有没有办法将语言选择器 Inno Setup 与VCL样式一起使用 如何 出现 选择安装语言 对话框之前叫做 因此您无法加载对话框的皮肤 作为解决方法 您可以实现自己的 语言 对话框 并从InitializeSetup 这样自定义对话框就会
  • 使用带条件的内连接的 Doctrine 查询生成器

    我想使用 Doctrine 的查询构建器构建以下 SQL select c from customer c join phone p on p customer id c id and p phone phone where c usern
  • SQL 查询用于在 SQL Server 中生成类似输出查询相关表的矩阵

    我有三张桌子 Product ProductID ProductName 1 Cycle 2 Scooter 3 Car Customer CustomerID CustomerName 101 Ronald 102 Michelle 10