Sql 聚合函数或GROUPBY子句

Sql 聚合函数或GROUPBY子句,sql,asp.net,sql-server,Sql,Asp.net,Sql Server,我使用了以下查询: SELECT DISTINCT b.strCostCentreID, b.strPOSOnlineRefNo, b.strPayTypeCode, tblMachine.strDesc AS KioskName, (SUM(b.dblPaidAmt)) AS RM, (SUM(b.dblIpay88Amt)) AS pay88AmtRM, (SELECT STUFF((select ',' + strProdType

我使用了以下查询:

SELECT DISTINCT 
    b.strCostCentreID, b.strPOSOnlineRefNo, b.strPayTypeCode,
    tblMachine.strDesc AS KioskName,
    (SUM(b.dblPaidAmt)) AS RM,
    (SUM(b.dblIpay88Amt)) AS pay88AmtRM,
    (SELECT STUFF((select   ','  + strProdType
     FROM tblCurrTrx AS a
     WHERE a.strPOSOnlineRefNo = b.strPOSOnlineRefNo FOR XML PATH('')), 1, 1,'')) AS Agency
FROM 
    tblCurrTrx AS b
INNER JOIN 
    tblMachine ON b.strMachID = tblMachine.strMachID
WHERE 
    b.strPaymentMethod = '2' 
    AND (dtmTrans >= '1/3/2020') 
    AND (strTransStatus = '01')
GROUP BY 
    b.strPOSOnlineRefNo
但我得到了以下错误:

Msg 8120,第16级,状态1,第1行
列“tblCurrTrx.strCostCentreID”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中


如果使用group by子句,则select语句列应包含在group by中,即

select distinct b.strCostCentreID ,  b.strPOSOnlineRefNo, b.strPayTypeCode, tblMachine.strDesc as KioskName, 
 (SUM(b.dblPaidAmt)) as RM ,(SUM(b.dblIpay88Amt)) As pay88AmtRM ,

(Select STUFF((select   ','  +strProdType from tblCurrTrx as a  where a.strPOSOnlineRefNo = b.strPOSOnlineRefNo for xml path('')),1,1,'')) as Agency


From tblCurrTrx as b INNER JOIN tblMachine ON b.strMachID = tblMachine.strMachID WHERE  

b.strPaymentMethod = '2' and (dtmTrans>='1/3/2020') AND (strTransStatus='01') group by b.strPOSOnlineRefNo, b.strCostCentreID , b.strPayTypeCode, tblMachine.strDesc 

请按字段添加分组

    select distinct b.strCostCentreID ,  b.strPOSOnlineRefNo, b.strPayTypeCode, tblMachine.strDesc as KioskName, 
         (SUM(b.dblPaidAmt)) as RM ,(SUM(b.dblIpay88Amt)) As pay88AmtRM ,

        (Select STUFF((select   ','  +strProdType from tblCurrTrx as a  where a.strPOSOnlineRefNo = b.strPOSOnlineRefNo for xml path('')),1,1,'')) as Agency


        From tblCurrTrx as b INNER JOIN tblMachine ON b.strMachID = tblMachine.strMachID WHERE  

        b.strPaymentMethod = '2' and (dtmTrans>='1/3/2020') AND (strTransStatus='01') 

group by b.strCostCentreID,b.strPOSOnlineRefNo, b.strPayTypeCode, tblMachine.strDesc
试试这个:

SELECT DISTINCT b.strCostCentreID
               ,b.strPOSOnlineRefNo
               ,b.strPayTypeCode
               ,tblMachine.strDesc AS KioskName
               ,SUM(b.dblPaidAmt) AS RM
               ,SUM(b.dblIpay88Amt) AS pay88AmtRM
              ,DS.Agency
FROM tblCurrTrx AS b
INNER JOIN tblMachine 
    ON b.strMachID = tblMachine.strMachID
OUTER APPLY
(
    SELECT STUFF
    (
        (
            select   ','  + strProdType
            FROM tblCurrTrx AS a
            WHERE a.strPOSOnlineRefNo = b.strPOSOnlineRefNo 
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)')
        ,1
        ,1
        ,''
    )
) DS(Agency)
WHERE b.strPaymentMethod = '2' 
    AND dtmTrans >= '1/3/2020' 
    AND strTransStatus = '01'
GROUP BY b.strCostCentreID
        ,b.strPOSOnlineRefNo
        ,b.strPayTypeCode
        ,tblMachine.strDesc
        ,DS.Agency

按b.strCostCentreID、b.strpsonlinerefno、b.strPayTypeCode、tblMachine.strDesc分组
。非常感谢第一次工作的Akina。现在要明白这一点!在分组中两次提到b.strpsonlinerefno是多余的。