连接表和LEFT JOIN在TSQL作为新列(Joining tables and LEFT JOI

2019-10-23 10:19发布

在此示例中,我有一个包含数据,我的客户和一个办公用品商店有产品的两个表。 这将在下面看到的:

上述表的主要作用是提供所需要的数据的第三表是订单表

使用订单表,我可以得到我从客户和产品表需要报告的简要总结。 当我想看到每个项目的每个客户的购买数量的问题开始。

像这些表例如。

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

像这样。

我已经使用CTE显示由项目Row_number但我现在的代码是相当太长,我目前正在测试的一些方法来做到这一点的最有效和最简洁的方式。 如果有人可以教我如何做到这一点的短方式,将是巨大的。

我不是很肯定,如果我的问题的标题是正确的,我会如果它似乎不正确更改。

Answer 1:

因此,第一步将是与你的基本查询开始。 这给你的最后报告信息,但在错误的格式。 现在所有这一切都需要的是转动它。

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);


文章来源: Joining tables and LEFT JOIN as new Columns in tsql