【发布时间】:2013-06-07 13:21:57
【问题描述】:
请考虑以下几点:
IF OBJECT_ID ('tempdb..#Customer') IS NOT NULL
DROP TABLE #Customer;
CREATE TABLE #Customer
(
CustomerKey INT IDENTITY (1, 1) NOT NULL
,CustomerNum INT NOT NULL
,CustomerName VARCHAR (25) NOT NULL
,Planet VARCHAR (25) NOT NULL
)
GO
INSERT INTO #Customer (CustomerNum, CustomerName, Planet)
VALUES (1, 'Anakin Skywalker', 'Tatooine')
, (2, 'Yoda', 'Coruscant')
, (3, 'Obi-Wan Kenobi', 'Coruscant')
, (4, 'Luke Skywalker', 'Tatooine')
, (4, 'Luke Skywalker', 'Tatooine')
, (4, 'Luke Skywalker', 'Bespin')
, (4, 'Luke Skywalker', 'Bespin')
, (4, 'Luke Skywalker', 'Endor')
, (4, 'Luke Skywalker', 'Tatooine')
, (4, 'Luke Skywalker', 'Kashyyyk');
请注意,总共有 10 条记录。我知道我可以通过以下两个查询之一获得 CustomerName 和 PLAnet 的不同组合列表。
SELECT DISTINCT CustomerName, Planet FROM #Customer;
SELECT CustomerName, Planet FROM #Customer
GROUP BY CustomerName, Planet;
但是,我想要的是一种简单的方法来获取这些值的计数,而不是值本身。我想要一种输入速度快、性能好的方法。我知道我可以将这些值加载到 CTE、临时表、表变量或子查询中,然后对记录进行计数。有没有更好的方法来实现这一点?
【问题讨论】:
-
为什么“快速打字”是一项要求?您多久手动编写一次这些查询?你能告诉我们什么更重要:查询是高效的,还是查询“快速输入”?
-
我已向@ypercube's SQLFiddle 添加了一些其他查询变体。您应该对其进行测试,然后您可以根据性能和/或打字手指的压力来决定您最喜欢哪一个。
标签: sql sql-server tsql sql-server-2005 sql-server-2012