连接表和 LEFT JOIN 作为 sql 中的新列
Joining tables and LEFT JOIN as new Columns in tsql
在此示例中,我有两个 table 包含我的客户数据和办公用品商店的产品数据。如下所示:
以上 table 的主要功能是为第三个 table 提供所需的数据,即订单 table
使用订单 table,我可以从客户和产品 table 获得我需要的报告的快速摘要。当我想查看每个客户对每件商品的购买数量时,问题就出现了。
例如这些 table。
使用上面的 tables,我需要创建一个报告来显示每个客户对每件商品的购买次数。
像这样。
我已经使用 CTE
来显示 Row_number
的项目,但是我现在的代码太长了,我目前正在测试一些最有效和最简洁的方法.如果有人能教我如何以更短的方式做到这一点,那就太好了。
我不太确定我的问题标题是否正确,如果它看起来不正确我会更改它。
第一步是从基本查询开始。这为您提供了最终报告信息,但格式错误。现在所需要做的就是转动它。
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
已更新
旋转这个更有趣,因为大概产品的数量是不固定的。因此,您需要编写一个动态数据透视表来确定基于产品的列!请注意我没有测试下面的内容,但你应该明白了。有关 Pivots 的更多问题,请参阅 dynamic pivots 上的大量帖子:
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);
在此示例中,我有两个 table 包含我的客户数据和办公用品商店的产品数据。如下所示:
以上 table 的主要功能是为第三个 table 提供所需的数据,即订单 table
使用订单 table,我可以从客户和产品 table 获得我需要的报告的快速摘要。当我想查看每个客户对每件商品的购买数量时,问题就出现了。
例如这些 table。
使用上面的 tables,我需要创建一个报告来显示每个客户对每件商品的购买次数。
像这样。
我已经使用 CTE
来显示 Row_number
的项目,但是我现在的代码太长了,我目前正在测试一些最有效和最简洁的方法.如果有人能教我如何以更短的方式做到这一点,那就太好了。
我不太确定我的问题标题是否正确,如果它看起来不正确我会更改它。
第一步是从基本查询开始。这为您提供了最终报告信息,但格式错误。现在所需要做的就是转动它。
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
已更新
旋转这个更有趣,因为大概产品的数量是不固定的。因此,您需要编写一个动态数据透视表来确定基于产品的列!请注意我没有测试下面的内容,但你应该明白了。有关 Pivots 的更多问题,请参阅 dynamic pivots 上的大量帖子:
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);