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是多余的。