這裏是我想獲得: -如何使用一個t-sql語句獲取計數和值?
SELECT
Column1,
Count(Column1),
Count(Column2)
FROM Table1
我知道這個查詢是無效的。但是有什麼辦法可以使Column1的所有值和Column1的Count和Column2的Count的值相等。
這裏是我想獲得: -如何使用一個t-sql語句獲取計數和值?
SELECT
Column1,
Count(Column1),
Count(Column2)
FROM Table1
我知道這個查詢是無效的。但是有什麼辦法可以使Column1的所有值和Column1的Count和Column2的Count的值相等。
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
嘗試:
SELECT column1,(SELECT COUNT(Column1),COUNT(Column2)) AS CNT FROM Table1
這應該得到你想要的東西,那麼當你運行你的取得命令你像你一樣使用它。
E.g.在php中, $rows = mysql_fetch_assoc(mysql_query($query)); echo $rows['CNT'];
問題,如問,沒有意義。你的意思是你想要Col1和Col2的值的個別組合的計數?如果是這樣的:
select column1,column2,count(*)
from table1
group by column1, column2
如果這不是你想要的請嘗試給出一些示例數據,輸入可能是什麼樣子,你的期望的輸出會是什麼。
這是版本相關的,對吧? – 2011-01-25 19:01:54
@nathan gonzalez:是的,SQL Server 2005 + – gbn 2011-01-25 19:03:53