2012-09-26 55 views
1

是否可以有一個優化的單個查詢語句,它將返回不同的行數?請看下圖:如何在一個結果集中包含不同的計數

create table #tbl (id int, name varchar(30)) 
go 
INSERT INTO #tbl (id, name) values(1, 'test1') 
INSERT INTO #tbl (id, name) values(2, 'test2') 
INSERT INTO #tbl (id, name) values(1, 'test3') 
INSERT INTO #tbl (id, name) values(1, 'test4') 
INSERT INTO #tbl (id, name) values(3, 'test5') 
INSERT INTO #tbl (id, name) values(1, 'test6') 
INSERT INTO #tbl (id, name) values(1, 'test7') 
INSERT INTO #tbl (id, name) values(2, 'test8') 
INSERT INTO #tbl (id, name) values(1, 'test9') 

我想下面返回一個記錄:

id  name 
---  ---- 
3  test1 
3  test2 
3  test3 
3  test4 
3  test5 
3  test6 
3  test7 
3  test8 
3  test9 

回答

3

以下查詢將返回您的問題中指定的結果集,雖然它不是非常有效。

SELECT (SELECT COUNT(DISTINCT id) FROM #tbl), name FROM #tbl 

我建議,如果您需要在那裏只有一個結果集,這樣做的:

SELECT id, name FROM #tbl 
UNION 
SELECT COUNT(DISTINCT id), NULL FROM #tbl 
ORDER BY name 

,然後捕獲與在結果空「名稱」值的行。

1

這是一個單一的查詢,但與示例數據它做兩次表掃描。我不知道

SELECT 
    (SELECT COUNT(DISTINCT(id)) FROM #tbl) id, 
    name 
FROM 
    #tbl 
+0

同意海報,表格大小將是這個解決方案的問題。對於小數據集非常有效。 –

相關問題