【发布时间】:2009-09-03 11:30:17
【问题描述】:
我正在尝试计算过去 3 个月内已计费的客户与整个客户群之间的差异。我已经能够使用以下 SQL 计算已计费的客户
DECLARE @DateFrom AS DATETIME
SET @DateFrom =
CONVERT(DATETIME, CAST(YEAR(GETDATE()) AS VARCHAR(4)) +
'-' +
CAST(MONTH(DATEADD(MONTH, -3, GETDATE())) AS VARCHAR(2)) + '-01', 120)
DECLARE @DateTo AS DATETIME
SET @DateTo =
CONVERT(DATETIME, CAST(YEAR(GETDATE()) AS VARCHAR(4)) +
'-' +
CAST(MONTH(GETDATE()) AS VARCHAR(2)) + '-01', 120)
SELECT DISTINCT
i.CustomerCode
FROM
Invoice AS i
WHERE
(i.InvoiceDate > @DateFrom AND i.InvoiceDate < @DateTo)
我要比较的表是 Customer 表,它也有一个 CustomerCode 字段。
提前致谢!
编辑
在花了很长时间试图解决这个问题后,在这里发布此消息几分钟后,我找到了解决方案。使用 NOT IN 子句!
SELECT
c.CustomerCode
FROM
[Customer] AS c
WHERE
c.CustomerCode NOT IN (
SELECT DISTINCT
i.CustomerCode
FROM
[Invoice] AS i
WHERE
(i.InvoiceDate >= @DateFrom AND i.InvoiceDate < @DateTo))
在我的情景中,当我在 Management Studio 中测试每个步骤时,这似乎比下面提到的步骤执行得更快。
【问题讨论】:
-
你到底想要什么?过去 3 个月内未计费的所有客户的列表?您使用的是哪个版本的 SQL Server?
-
正是如此。我正在使用 SQL Server 2000。有没有比我目前拥有的更好的解决方案?
-
不,我认为在 SQL Server 2000 中,这很简单。
标签: sql sql-server join sql-server-2000