即使记录不存在或值为零,也返回所有行

时间:2016-10-26 15:09:56

标签: sql sql-server tsql sql-server-2012 left-join

我在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

我想显示所有记录,即使它没有价值。

需要进行哪些更改?

1 个答案:

答案 0 :(得分:0)

解,

在我使用的陈述中,

WHERE s.BRN = 3 or s.SELLINC is null or s.SELLINC = '0'