Sql 本质上与内部连接两者相同。我没有看到问题,您的cte是否没有生成您所追求的商店/部门的全面列表?因为查询看起来是可靠的。Stores表中包含的商店都在那里,它会正确地将它们全部拉回来,但是,没有给定日期范围数据的商店只是有一个随机的部门分类,其中的$0.0
Sql 本质上与内部连接两者相同。我没有看到问题,您的cte是否没有生成您所追求的商店/部门的全面列表?因为查询看起来是可靠的。Stores表中包含的商店都在那里,它会正确地将它们全部拉回来,但是,没有给定日期范围数据的商店只是有一个随机的部门分类,其中的$0.0,sql,sql-server,Sql,Sql Server,本质上与内部连接两者相同。我没有看到问题,您的cte是否没有生成您所追求的商店/部门的全面列表?因为查询看起来是可靠的。Stores表中包含的商店都在那里,它会正确地将它们全部拉回来,但是,没有给定日期范围数据的商店只是有一个随机的部门分类,其中的$0.00。我认为这个查询也很可靠,直到我注意到一点奇怪的地方。哦,你的WHERE子句正在过滤它们,将DCRSales.WorkingDate移到“”和“”之间,然后去掉WHERE,就是这样!请将您的评论作为答案发布,以便我将其标记为正确。这绝对是一个
本质上与内部连接两者相同。我没有看到问题,您的
cte
是否没有生成您所追求的商店/部门的全面列表?因为查询看起来是可靠的。Stores表中包含的商店都在那里,它会正确地将它们全部拉回来,但是,没有给定日期范围数据的商店只是有一个随机的部门分类,其中的$0.00。我认为这个查询也很可靠,直到我注意到一点奇怪的地方。哦,你的WHERE
子句正在过滤它们,将DCRSales.WorkingDate移到“”和“”
之间,然后去掉WHERE
,就是这样!请将您的评论作为答案发布,以便我将其标记为正确。这绝对是一个有趣的解决方案。然而,我们不使用统计软件包(尽管我试图说服他们使用R来处理更多面向数据的东西),高层现在就想要它,我很幸运地将他们拥有的数据拼凑成当前的格式。遗憾的是,在我工作的地方,对这类事情没有太多的思考和时间。那么,也许你可以使用一个存储过程或一个简短的程序/脚本来充分模拟这个过程。基本上:提取到临时表中,以一系列方式操作这些表(不影响原始数据),并从中生成最终结果。祝你好运。这确实奏效了!非常感谢你的帮助。
CREATE TABLE [dbo].[DCRSales](
[WorkingDate] [smalldatetime] NOT NULL,
[Store] [int] NOT NULL,
[Department] [int] NOT NULL,
[NetSales] [money] NOT NULL,
[DSID] [int] IDENTITY(1,1) NOT NULL)
CREATE TABLE [dbo].[Stores](
[Number] [int] NOT NULL,
[Has_Deli] [bit] NOT NULL,
[Alcohol_Register] [int] NULL,
[Is_Cost_Saver] [bit] NOT NULL,
[Store_Status] [nchar](10) NOT NULL,
[Supervisor_Number] [int] NOT NULL,
[Email_Address] [nchar](20) NOT NULL,
[Sales_Area] [int] NULL,
[PZ_Store_Number] [int] NULL,
[Has_SCO] [bit] NULL,
[SCO_Reg] [nchar](25) NULL,
[Has_Ace] [bit] NULL,
[Ace_Sq_Ft] [int] NULL,
[Open_Date] [datetime] NULL,
[Specialist] [nchar](2) NULL,
[StateID] [int] NOT NULL)
CREATE TABLE [dbo].[DepartmentMap](
[Department_Number] [int] NOT NULL,
[Description] [nvarchar](max) NOT NULL,
[Parent_Department] [int] NOT NULL)
CREATE TABLE [dbo].[ParentDepartments](
[Parent_Department] [int] NOT NULL,
[Description] [varchar](50) NULL
WITH CTE AS (
SELECT S.Number as Store, DepartmentMap.Department_Number as Department, ParentDepartments.Parent_Department as Parent, ParentDepartments.Description as ParentDescription, DepartmentMap.Description as ChildDescription
FROM Stores as S CROSS JOIN dbo.DepartmentMap INNER JOIN ParentDepartments ON DepartmentMap.Parent_Department = ParentDepartments.Parent_Department
WHERE S.Number IN(<STORES>) AND Department_Number IN(<DEPTS>)
)
SELECT CTE.Store, CTE.Department, SUM(ISNULL(DCRSales.NetSales, 0.00)) as Sales, CTE.Parent, CTE.ParentDescription, CTE.ChildDescription
FROM CTE LEFT JOIN DCRSales ON DCRSales.Department = CTE.Department AND DCRSales.Store = CTE.Store
WHERE DCRSales.WorkingDate BETWEEN '<FIRSTDAY>' AND '<LASTDAY>' OR DCRSales.WorkingDate IS NULL
GROUP BY CTE.Store, CTE.Department, CTE.Parent, CTE.ParentDescription, CTE.ChildDescription
ORDER BY CTE.Store ASC, CTE.Department ASC
DCRSales.WorkingDate BETWEEN '<FIRSTDAY>' AND '<LASTDAY>'