我在SQL Server 2014中有几个表。
在下面的视图(dbo.new)中,我使用左外连接来组合表格。
SELECT
dbo.Division.DivNo,
dbo.Division.DivName,
dbo.Categaory.CatNo,
dbo.Categaory.CatName,
dbo.Department.DeptNo,
dbo.Department.DeptName,
dbo.Dissection.DissNo,
dbo.Dissection.DissName,
dbo.WSALES.BRN,
dbo.WSALES.SELLINC,
dbo.WSALES.DATE,
dbo.BRANCH.NAME AS BranchName
FROM
dbo.Department left outer join
dbo.Categaory left outer join
dbo.Division left outer join
dbo.Dissection ON dbo.Division.DivNo = dbo.Dissection.DivNo ON dbo.Categaory.CatNo = dbo.Dissection.CatNo ON dbo.Department.DeptNo = dbo.Dissection.DeptNo left outer join
dbo.WSALES ON dbo.Dissection.DissNo = dbo.WSALES.SSECTION left outer join
dbo.BRANCH ON dbo.WSALES.BRN = dbo.BRANCH.NUM
我使用下面的T-SQL代码来提取结果,
SELECT
s.[DivNo]as Division,
s.[DivName] as DivisionName,
s.[CatNo] Category,
RTRIM(CAST(s.[CatName] AS VARCHAR(50)) ) AS CategoryName,
sum(case when s.Date between '2016-08-14' and '2016-08-20'
then s.SELLINC else 0 end) ActualSales,
sum(case when s.Date between '2015-08-16' and '2015-08-22'
then s.SELLINC else 0 end) LastYrVariance,
(IsNull(sum(case when s.Date between '2016-08-14' and '2016-08-20'
then s.SELLINC else 0 end)-sum(case when s.Date between '2015-08-16' and '2015-08-22'
then s.SELLINC else 0 end),0)/NullIf(sum(case when s.Date between '2015-08-16' and '2015-08-22'
then s.SELLINC else 0 end),0))*100 LastYrVariancePercentage
FROM [dbo].[new] s
WHERE s.BRN = 3
GROUP BY s.[DivNo],s.[DivName],s.[CatNo], s.[CatName]
ORDER BY case s.[DivNo]
when '1' then 1
when '2' then 2
when '3' then 3
when '4' then 4
else 5
end,
case s.[CatNo]
when '1' then 1
when '2' then 2
when '3' then 3
else 4
end
如果我运行上面的代码,表中没有任何值的行/记录很少。我的结果低于结果,
Div DivName Cat CatName Sales Variance YrVariance
1 Fashion 1 Women's 5 10 5
1 Fashion 2 WomAcc 10 20 10
2 Home 3 Floor 5 10 5
2 Home 4 Food 5 10 5
4 Rest 6 Rests 10 20 10
我期待以下结果,
Div DivName Cat CatName Sales Variance YrVariance
1 Fashion 1 Women's 5 10 5
1 Fashion 2 WomAcc 10 20 10
2 Home 3 Floor 5 10 5
2 Home 4 Food 5 10 5
**3 Pets 5 Pet 0 0 0**
4 Rest 6 Rests 10 20 10
我想显示所有记录,即使它没有价值。
需要进行哪些更改?
答案 0 :(得分:0)
解,
在我使用的陈述中,
WHERE s.BRN = 3 or s.SELLINC is null or s.SELLINC = '0'