2011-01-25 62 views

回答

1

OVER子句修改彙總範圍,允許查詢發生,只要你想

SELECT 
    Column1, 
    Count(Column1) OVER(), 
    Count(Column2) OVER() 
FROM Table1 

編輯:

上面的SQL Server 2005+

編輯2:

SQL Server 2000中的CROSS JOIN/COUNT解決方案在加載時不可靠。

從多個連接試試這個,注意@@ ROWCOUNT從來沒有在連接2

--connection 1 
set nocount on; 
drop table dbo.test_table; 
GO 
create table dbo.test_table 
(
    id_field uniqueidentifier not null default(newid()), 
    filler char(2000) not null default('a') 
); 
GO 
create unique clustered index idx_id_fld on dbo.test_table(id_field); 
GO 
while 1 = 1 
insert into dbo.test_table default values; 

--connection 2 
select T2.cnt, T1.id_field, T1.filler 
from dbo.test_table T1 
cross join (select COUNT(*) as cnt from dbo.test_table) T2 
SELECT @@ROWCOUNT 

select T2.cnt, T1.id_field, T1.filler 
from dbo.test_table T1 
cross join (select COUNT(*) as cnt from dbo.test_table) T2 
SELECT @@ROWCOUNT 

select T2.cnt, T1.id_field, T1.filler 
from dbo.test_table T1 
cross join (select COUNT(*) as cnt from dbo.test_table) T2 
SELECT @@ROWCOUNT 

EDIT3等於T2.cnt:cyberkiwi規定的測試是錯誤的。垃圾。

如果你忘記了@@ ROWCOUNT,你可以看到cnt是在SSMS「網格模式」行數

現在不同了,你用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE,它並給出正確的結果,但如果你是夠忙得到不一致的結果你真的想運行這個嗎?

使用臨時表,以確保一致的數據集,如果你正在運行SQL Server 2000

+0

這是版本相關的,對吧? – 2011-01-25 19:01:54

+0

@nathan gonzalez:是的,SQL Server 2005 + – gbn 2011-01-25 19:03:53

0

嘗試:

SELECT column1,(SELECT COUNT(Column1),COUNT(Column2)) AS CNT FROM Table1 

這應該得到你想要的東西,那麼當你運行你的取得命令你像你一樣使用它。

E.g.在php中, $rows = mysql_fetch_assoc(mysql_query($query)); echo $rows['CNT'];

0

問題,如問,沒有意義。你的意思是你想要Col1和Col2的值的個別組合的計數?如果是這樣的:

select column1,column2,count(*) 
    from table1 
group by column1, column2 

如果這不是你想要的請嘗試給出一些示例數據,輸入可能是什麼樣子,你的期望的輸出會是什麼。