当前位置: 首页 > 知识库问答 >
问题:

将表和左连接作为 tsql 中的新列连接

上官联
2023-03-14

在这个示例中,我有两个表,包含我的客户和一家办公用品商店的产品的数据。如下所示:

上面的表主要功能是为第三个表,即订单表,提供所需的数据

使用订单表,我可以从客户和产品表中获得我需要的报告的快速摘要。当我想查看每个客户每件商品的购买数量时,问题就开始了。

比如这些表格。

使用上面的表格,我需要创建一个报告,显示每个项目的每个客户的购买数量。

像这样。

我已经使用CTE通过Row_number来显示项目,但是我现在的代码太长了,我目前正在测试一些方法来做到这一点,最有效和最简洁的方法。如果有人能教我如何用更短的方法来做到这一点,那就太好了。

我不太确定我的问题的标题是否正确,如果看起来不正确,我会更改它。

共有1个答案

鱼志学
2023-03-14

因此,第一步是从基本查询开始。这为您提供了最终报告信息,但格式错误。现在所需要的就是让它转动。

Select cus_Name, prod_Name, SUM(ord_Qty)
from Orders o
inner join Customers c on c.cus_ID = o.cus_ID
inner join Products p on p.prod_ID = o.Prod_ID
GROUP BY cus_Name, prod_Name

更新

旋转这个更有意思,因为产品的数量可能是不固定的。因此,您需要编写一个动态透视来根据产品确定列!请注意,我还没有测试以下,但你应该得到的想法。有关枢轴的更多问题,请参考动态枢轴的大量帖子:

请参见SQLFiddle

DECLARE @colsForSelect VARCHAR(2000)
DECLARE @colsForPivot VARCHAR(2000)
DECLARE @query VARCHAR(4000)

SELECT  @colsForSelect = ISNULL(@colsForSelect + ',','') + ' ISNULL([' + prod_Name + '],0) AS [' + prod_Name + ']',
        @colsForPivot = ISNULL(@colsForPivot + ',','') + ' [' + prod_Name + ']'
FROM    Products

SET @query = N'SELECT cus_Name,'+ @colsForSelect +' 
FROM (    
     Select cus_Name, prod_Name, SUM(ord_Qty) as sum_ord_Qty
     from Orders o
     inner join Customers c on c.cus_ID = o.cus_ID
     inner join Products p on p.prod_ID = o.Prod_ID
     GROUP BY cus_Name, prod_Name
) p 
PIVOT (MAX([sum_ord_Qty]) FOR prod_Name IN ( '+ @colsForPivot +' )) 
AS pvt;'

EXECUTE(@query);
 类似资料:
  • 问题内容: 可以说我有两个表:Persons(P_Id,Name)和Orders(O_Id,OrderNo,P_Id)…我想做一个左联接,它是: 这将给我同一人的不同行号的多个行。我真正需要获得的是每个人一行,并且列表中属于该人的所有OrderNo。 使用Coldfusion,我可以查询Persons表,遍历每条记录,并针对每条记录对Orders进行查询,并获取该P_Id的结果并将其放在列表中,并

  • 当我添加一个左连接来获取外部表的计数时,它将我其他左连接表的总和值与计数相乘,我也不能在这里使用不同的总和,因为两个值可以是相同的:

  • 本文向大家介绍说下左连接和右连接相关面试题,主要包含被问及说下左连接和右连接时的应答技巧和注意事项,需要的朋友参考一下 比如有两张表 A,B。左连接是把符合条件的所有A表的内容列出来,B表如果没有内容匹配用NULL代替。 右连接是符合条件的所有B表的内容列出来,A表如果没有内容匹配用NULL代替

  • 我有两个熊猫dfx和y,它们都有相同的3列abc(不可为null)。我需要创建一个新的df z,通过“从x减去与y的行完全相同的行”获得,即a 我该怎么做呢?陷入了索引,协调,合并,加入,... 例子:

  • 主要内容:Oracle LEFT JOIN子句简介,Oracle LEFT JOIN示例在本教程中,您将学习如何使用Oracle 子句来查询多个表中的数据。 Oracle LEFT JOIN子句简介 以下语句说明连接两个表和时的子句的语法: 在这个查询中,是左表,是右表。查询将表中的每一行与表中的行进行比较。如果和表中的一对行满足连接谓词,查询将组合两个表中行的列值,并将结果行记录包含在结果集中。 如果表中的行在表中没有找到匹配的行,则查询将会将SELECT子句中出现在表的每个列的值

  • LEFT OUTER JOIN 左外连接 [ ] 需求:查询所有分类,如果该分类下没有商品,则不显示该分类 [ ] 实现: SELECT `goods`.`id`, `goods`.`title`, `goods`.`price`, `goods`.`cate_id`, `cate`.`id`, `cate`, `cate.title` F