2012-02-01 158 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