请尝试以下...
SELECT [Invoice Number],
[Invoice Date],
[Invoice Status]
FROM Invoices
WHERE [Invoice Status] NOT IN ('CANCELLED', 'DONE')
AND DATEADD(DAY, -2, GETDATE()) > [Invoice Date]
UNION
SELECT [Invoice Number],
[Invoice Date],
[Invoice Status]
FROM Invoices
WHERE [Invoice Status] NOT IN ('CANCELLED', 'DONE')
AND DATEADD(DAY, -2, GETDATE()) <= [Invoice Date]
UNION
SELECT [Invoice Number],
[Invoice Date],
[Invoice Status]
FROM Invoices
WHERE [Invoice Status] IN ('CANCELLED', 'DONE');
在每个由SELECT
声明我选择显示所有字段,并以相同的顺序。请注意,构成UNION
的SELECT
语句中的相应字段应始终具有相同的类型。在某些情况下,一种类型的字段可能会转换为与另一种类型匹配,但这有时会导致麻烦,强烈建议您尝试避免出现这种情况。
在我的第一个声明中,我将当前日期前两天的日期与[Invoice Date]
进行比较,如果它更大(即发票超过2天),则包含该行(视其[Invoice Status]
而定)。
对于第二种说法,我选择日期不超过当前日期前两天的发票。
对于第三种说法,我显示状态为CANCELLED
或DONE
的所有发票。
您可以在每个列表中指定相似或不同模式的排序,分组等,但由于您没有在您的问题中指定任何此类信息,我并未尝试实施它们。
如果您有任何问题或意见,请随时发布相应评论。
“我正在使用SQL服务器,编写存储过程是我不想做的事情” - 动机是#1解决方案! –
请研究'UNION'条款。我将准备一个基于它的答案来说明它的用法。 – toonice
欢迎来到StackOverflow。请花一些时间并访问[帮助中心](http://stackoverflow.com/help/)习惯网站。你试过什么了? – Spidey