首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从左表返回所有数据

从左表返回所有数据
EN

Database Administration用户
提问于 2017-05-11 02:03:24
回答 1查看 892关注 0票数 2

我的左表比右表保存更多的存储名。我以为一个快速的左连接将返回数据集,但没有效果!

Data In From子句拥有最多的选项,我想显示所有选项,在左侧联接子句中的数据有一些,但不是所有我想显示的选项。

如果我使用CTE显示返回的storeName为空,而不是左侧联接表中不存在的storeName(s),则创建CTE以获取SUM(),并将数据拖到主查询中。

这里是我使用的查询,它没有给出我想要的结果。

代码语言:javascript
运行
复制
;With DataFromOne As
(
    Select   StoreName
             ,DataFromOne = Count(ramalad)
    FROM     DataFromOne
    WHERE    EntryDate BETWEEN '20170101' AND '20170331'
    GROUP BY StoreName
)
Select   ec.StoreName
         ,[Emp Count] = COUNT(Employee)
         ,[PT Count] = COALESCE(ec.DataFromOne,0)
FROM     DataFromOne ec
LEFT OUTER JOIN DataFromTwo fji
ON       ec.StoreName = fji.StoreName
WHERE    fji.saleDate BETWEEN '20170101' AND '20170331'
GROUP BY ec.StoreName, ec.DataFromOne
ORDER BY ec.StoreName ASC;
EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-05-11 02:21:31

如果在正确的表上添加了一个筛选器,则有效地将外部联接转换为内部连接。

将日期筛选器从开始位置移到哪里。

此外,我建议开放的范围,而不是介于之间。

最后,我建议不要将CTE命名为与基表相同的名称(这令人困惑),使用正确的模式引用,并以分号结尾。

以下是一个开始:

代码语言:javascript
运行
复制
;With ec As
(
    Select
      StoreName
      ,DataFromOne = Count(ramalad)
    FROM dbo.DataFromOne
    WHERE EntryDate >= '20170101' 
       AND EntryDate < '20170401'
   GROUP BY StoreName
)
Select 
  ec.StoreName
  ,[Emp Count] = COUNT(fji.Employee)
  ,[PT Count] =      COALESCE(ec.DataFromOne,0)
FROM ec
LEFT OUTER JOIN dbo.DataFromTwo AS fji
   ON ec.StoreName = fji.StoreName
   AND fji.SaleDate >= '20170101'
   AND fji.SaleDate <  '20170401'
GROUP BY ec.StoreName, ec.DataFromOne
ORDER BY ec.StoreName;

实际上,您可以大大简化查询逻辑(尽管我不确定这将如何改变您的计划):

代码语言:javascript
运行
复制
SELECT 
  ec.StoreName,
  [Emp Count] = COUNT(fji.Employee),
  [PT Count]  = COUNT(ec.ramalad)
FROM dbo.DataFromOne AS ec
LEFT OUTER JOIN dbo.DataFromTwo AS fji
   ON ec.StoreName = fji.StoreName
   AND fji.SaleDate >= '20170101'
   AND fji.SaleDate <  '20170401'
WHERE ec.EntryDate >=  '20170101' 
  AND ec.EntryDate <   '20170401'
GROUP BY ec.StoreName
ORDER BY ec.StoreName;
票数 9
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/173285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档