SQL选择本月创建的至少一个订单的所有公司

时间:2015-06-23 13:50:36

标签: sql sql-server select

我正在尝试编写一个查询,让我可以获得本月创建的至少会有一个订单的公司列表。

我有两个表dbo.Companies和dbo.Orders 它们由CompanyID链接

我已经编写了部分脚本,但我无法弄清楚如何完成它。

SELECT COUNT(*) FROM dbo.Companies WHERE Month(CreatedDateTime) = MONTH(getDate())

这给了我一份本月创建的所有公司的清单,但我很困惑如何获得至少有一个订单的最后部分。

3 个答案:

答案 0 :(得分:2)

查询相对简单:

SELECT COUNT(*) 
FROM dbo.Companies 
WHERE Month(CreatedDateTime) = MONTH(getDate())
AND YEAR(CreatedDateTime) = YEAR(getDate()) 
AND EXISTS (SELECT 1 FROM dbo.Orders WHERE Orders.CompanyID = Companies.CompanyID)

您还可以在公司和订单上使用内部联接。

此外,您需要检查当月创建的公司的月份和年份。如果您只检查月份,那么在任何一年的当月创建的公司将与MONTH(getDate())

匹配

答案 1 :(得分:1)

EXISTS解决方案:

SELECT * FROM dbo.Companies c
where Month(CreatedDateTime) = MONTH(getDate())
  and exists (select 1 from dbo.Orders o
              where o.CompanyID = c.CompanyID)

JOIN版本:

select distinct c.*
FROM dbo.Companies c
  JOIN dbo.Orders o ON o.CompanyID = c.CompanyID
WHERE Month(CreatedDateTime) = MONTH(getDate())

答案 2 :(得分:1)

一种方法是使用exists运算符:

SELECT *
FROM   dbo.Companies c
WHERE  MONTH(CreatedDateTime) = MONTH(getDate()) AND
       EXISTS (SELECT *
               FROM   dbo.Orders o
               WHERE  c.id = o.companyId)