我正在尝试编写一个查询,让我可以获得本月创建的至少会有一个订单的公司列表。
我有两个表dbo.Companies和dbo.Orders 它们由CompanyID链接
我已经编写了部分脚本,但我无法弄清楚如何完成它。
SELECT COUNT(*) FROM dbo.Companies WHERE Month(CreatedDateTime) = MONTH(getDate())
这给了我一份本月创建的所有公司的清单,但我很困惑如何获得至少有一个订单的最后部分。
答案 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)