我有一个Employee表和一个Product表。第三个表(ProductsSold)包含一个EmployeeID,ProductID,DateSold。
ProductsSold表包含员工在特定日期出售的产品。
我正在尝试获取每位员工销售的每种产品的计数(即使员工售出了0件他们需要露面的产品)
select e.EmployeeName, p.ProductName, count(*) as c
from ProductsSold ps
inner join product p on ps.productid = p.productid
inner join employee e on ps.employeeid = e.employeeid
group by e.EmployeeName, p.ProductName
order by e.EmployeeName
我需要编写数据透视查询吗?这将成为SSRS报告。 SSRS是否支持数据透视查询?
答案 0 :(得分:2)
您可以使用设计的查询在SSRS中使用tablix控件来执行此操作。尽管您应该在查询中将对Employee表的联接更改为外部联接,以确保它们在没有销售的情况下仍然显示。您将在tablix中同时使用行和列分组。基本上,列组将通过为要分组的每个唯一值创建列来为您做一个枢轴。行组将为其分组的每个唯一值创建一行。请查看以下链接,以获取有关在SSRS中使用组的更多信息
答案 1 :(得分:2)
如果您在SSRS中使用查询结果,最好直接发送数据。您可以在报表中添加一个矩阵来为您进行数据透视。
您的查询有两个问题,
下面是我使用的一些示例数据,最后是一个查询,以获取所需的结果。
DECLARE @employees TABLE(EmployeeID int, EmployeeName varchar(64))
DECLARE @products TABLE(ProductID int, ProductName varchar(64))
DECLARE @sales TABLE(EmployeeID int, ProductID int, Qty int, SaleDate date)
INSERT INTO @employees VALUES (1, 'Dave'), (2,'Bob'), (3, 'Mary')
INSERT INTO @products VALUES (1, 'Cars'), (2, 'Bikes'), (3, 'Trucks')
INSERT INTO @sales VALUES
(1,1,5, '2019-04-30'), (1,1,10, '2019-04-30'), (1,2,11, '2019-04-29'),
(2,1,12, '2019-04-28'), (2,2,13, '2019-04-30'), (2,3,14, '2019-04-29')
SELECT
e.EmployeeName, p.ProductName, SUM(Qty) AS Qty
FROM @employees e
LEFT JOIN @sales s on e.EmployeeID = s.EmployeeID
LEFT JOIN @products p on s.ProductID = p.ProductID
group by e.EmployeeName, p.ProductName
order by e.EmployeeName
这次,我们从雇员开始,LEFT JOIN
到其他表格。这样可以确保所有员工都可以出现。
基于上面的样本数据,结果是
如果您在SSRS中将此用作数据集查询,则可以添加一个矩阵,其中包含“员工”行组和“产品”列组,“单元格”值为=SUM(Fields!Qty.Value)
这将为您提供一个如下所示的报告。(原谅格式,这实际上是2分钟的工作)