2012-02-01 119 views
1

我想通过SQL Server中的存储过程来检索总行和所有值。我有下面的东西。但是,它提到它不包含在聚合函数或GROUP BY子句中。感谢您的回复。谢谢。SQL Server中存储过程的问题

ALTER PROCEDURE abc.testing 
    @facility varchar(50), 
    @date datetime 
AS 

SELECT count(*), * 
FROM ss_table 
WHERE _start = @date 
     And fid IN (SELECT id 
        FROM ss_facilities 
        WHERE name = @facility) 
+0

感谢Jon的编辑。 – 2012-02-01 00:54:39

回答

1

试试这个

SELECT SS.cnt, ss_table.* 
FROM ss_table 
    cross apply (SELECT count(*) cnt 
        FROM ss_table 
        WHERE _start = @date 
         And fid IN (SELECT id 
            FROM ss_facilities 
            WHERE name = @facility)     
       ) ss 
WHERE _start = @date 
     And fid IN (SELECT id 
        FROM ss_facilities 
        WHERE name = @facility) 
+0

谢谢!感谢您的帮助! – 2012-02-01 06:30:57

+0

@SƲmmērAƥ不客气。 – 2012-02-01 06:36:38

0

您不能有用地混合和匹配聚合查询和非聚合查询 - 将它们分成两个独立的存储过程。

(此特定错误消息正在呈现,因为要返回聚合查询中的列,每列必须位于“group by”字段中,或者应用聚合函数(“max”,“计数“等),在这个查询中,”*“不符合这些标准)。

+0

如果从我的回答中没有清楚的说明,它不允许的原因是,包含“count(*)”而没有“GROUP BY”类的查询想要为该组返回单个行所有输入行,而“select *”想要返回所有的底层行。除此之外,这两种查询的结果格式都不相同 - 前者是简单计数,后者是底层数据的格式。 – bob 2012-02-01 01:13:53

+0

非常感谢你bob! – 2012-02-01 06:30:21

1

你使用像计数聚合函数时需要一组子句。如果ss_table有一个id列,请对其执行计数功能。

它的工作是这样的:

SELECT count(id), <explicitly define column names except the id here> 
FROM ss_table 
WHERE _start = @date 
And fid IN (SELECT id FROM ss_facilities WHERE name = @facility) 
group by <enter every column except the id from ss_table here> 

应该为你工作。

+0

非常感谢Bill。 – 2012-02-01 06:30:39