2014-09-05 190 views
-1

我有此腳本SQL Server 2012的查詢 - 集團通過

select * 
from psPatDiscounts 
where cancelflag = '0' 
and refdate between '2014-01-01 14:03:00' 
and '2014-01-31 14:03:00' 
group by FK_psPatRegisters 

然而,運行此腳本後,它給了我此錯誤消息:

消息8120,級別16,狀態1,行1
列'psPatDiscounts.PK_TRXNO'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。

+2

'SELECT *'擴展爲'SELECT Col1,Col2,...'表中所有可用的列。錯誤消息告訴你,如果你使用GROUP BY FK_psPatRegisters,你不能在查詢的SELECT部分​​包含任何其他列,除非它們被封裝在一個[聚合函數]中(http://msdn.microsoft .COM/EN-US /庫/ ms173454.aspx) – Dan 2014-09-05 03:51:51

回答

0

擁有一羣靠,你需要選擇列和聚合函數,像這樣:

select psPatRegisters.ID, Count(*) 
    from psPatDiscounts 
where cancelflag = '0' 
    and refdate between '2014-01-01 14:03:00' 
    and '2014-01-31 14:03:00' group by psPatRegisters.ID 

在這種情況下COUNT(*)是聚合函數,它是由ID分組

0

只能在GROUP BY或集合函數中包含所引用的選定列,如錯誤所示。

您需要在您的GROUP BY中包含更多列,或將您的SELECT *減少爲SELECT FK_psPatRegisters

SELECT FK_psPatRegisters 
FROM psPatDiscounts 
WHERE cancelflag = '0' AND refdate BETWEEN '2014-01-01 14:03:00' AND '2014-01-31 14:03:00' 
GROUP BY FK_psPatRegisters 

實質上,問題是單個單元格不能包含多個值。因此,要僅按一列進行分組並選擇其他列,則需要指定如何處理這些多個值。