以下是我想要的: -
SELECT
Column1,
Count(Column1),
Count(Column2)
FROM Table1
我知道此查询无效。但是,我有什么方法可以将第1列和第1列的计数以及第2列的计数的所有值都包含在内。
答案 0 :(得分:1)
OVER子句修改聚合范围以允许查询按您的需要进行
SELECT
Column1,
Count(Column1) OVER (),
Count(Column2) OVER ()
FROM Table1
编辑:
上面的SQL Server 2005 +
编辑2:
SQL Server 2000中的CROSS JOIN / COUNT解决方案在加载时不可靠。
从多个连接中尝试这一点,注意@@ ROWCOUNT永远不等于连接2中的T2.cnt
--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:cyberkiwi说测试错了。垃圾。
如果您忘记了@@ ROWCOUNT,您可以看到cnt
与SSMS“网格模式”中的行数不同
现在,您使用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
并确实提供了正确的结果,但是如果您忙于获得不一致的结果,您真的想要运行吗?
如果您运行的是SQL Server 2000,请使用临时表来确保数据集一致。
答案 1 :(得分:0)
尝试:
SELECT column1,(SELECT COUNT(Column1),COUNT(Column2)) AS CNT FROM Table1
那应该可以得到你想要的东西,然后当你运行你的fetch命令时,就像平常一样使用它。
E.g。在PHP中,
$rows = mysql_fetch_assoc(mysql_query($query));
echo $rows['CNT'];
答案 2 :(得分:0)
正如所提出的那样,这个问题没有意义。你的意思是你想要Col1和Col2的各个值组合的计数?如果是这样的话:
select column1,column2,count(*)
from table1
group by column1, column2
如果这不是你想要的,请尝试提供一些示例数据,输入可能是什么样的,以及你想要的输出是什么。