Sql server 按组选择SQL
我尝试使用“按组计算”进行选择,但出现以下错误: Msg 8120,16级,状态1,第1行 列“dbo.LN0617.RATE”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 有人能帮我吗Sql server 按组选择SQL,sql-server,Sql Server,我尝试使用“按组计算”进行选择,但出现以下错误: Msg 8120,16级,状态1,第1行 列“dbo.LN0617.RATE”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 有人能帮我吗 SELECT NT4 AS nt, LN0617.OFFCR AS OfficeCode, ln0617.RATE * 100 AS LaiSuat, SUM( ln0617.CBAL ) AS SoDu,
SELECT
NT4 AS nt,
LN0617.OFFCR AS OfficeCode,
ln0617.RATE * 100 AS LaiSuat,
SUM( ln0617.CBAL ) AS SoDu,
ln0617.RATE * 100 * sum( ln0617.CBAL ) AS LS1
FROM
[dbo].[SIL_CM]
JOIN [dbo].[LN0617] ON
(
ln0617.ACCTNO = SIL_CM.TK
AND
ln0617.CBAL <> 0
AND
SIL_CM.TKTYPE='L'
)
GROUP BY
sil_cm.NT4,
LN0617.OFFCR,
ln0617.RATE * 100
ORDER BY
LN0617.OFFCR,
ln0617.RATE * 100
选择
新界北4号,
LN0617.OFFCR作为办公代码,
ln0617.100美元,按LaiSuat计算,
金额(ln0617.CBAL)为SoDu,
ln0617.RATE*100*总和(ln0617.CBAL)为LS1
从…起
[dbo].[SIL_CM]
在上加入[dbo].[LN0617]
(
ln0617.ACCTNO=SIL_CM.TK
及
ln0617.cbal0
及
SIL_CM.TKTYPE='L'
)
分组
sil_cm.NT4,
LN0617.OFFCR,
ln0617.1费率*100
订购人
LN0617.OFFCR,
ln0617.1费率*100
我在您的选择列表中看到的唯一可能的问题是以下行:
ln0617.RATE*100*sum(ln0617.CBAL) as LS1
SQL Server可能正在抱怨ln0617.RATE,因为它与聚合函数混合使用。这里的一个选项是在总和内移动ln0617。RATE
:
select
NT4 as nt,
LN0617.OFFCR as OfficeCode,
ln0617.RATE*100 as LaiSuat,
sum(ln0617.CBAL) as SoDu,
100*sum(ln0617.RATE * ln0617.CBAL) as LS1
from [dbo].[SIL_CM]
...
这应该是可行的,因为乘法是可交换的。我相信您只需要参考分组列,因为*100是常量
SELECT
NT4 AS nt
, LN0617.OFFCR AS OfficeCode
, ln0617.RATE * 100 AS LaiSuat
, SUM(ln0617.CBAL) AS SoDu
, SUM(ln0617.CBAL * ln0617.RATE) / SUM(ln0617.cbal) AS LS1
FROM [dbo].[SIL_CM] SIL_CM
JOIN [dbo].[LN0617] LN0617 ON ln0617.ACCTNO = SIL_CM.TK
WHERE ln0617.CBAL <> 0
AND SIL_CM.TKTYPE = 'L'
GROUP BY
sil_cm.NT4
, LN0617.OFFCR
, ln0617.RATE
ORDER BY
LN0617.OFFCR
, ln0617.RAT
选择
NT4作为nt
,LN0617.OFFCR作为办公代码
,ln0617.100,按LaiSuat计算
,总和(ln0617.CBAL)为SoDu
,总和(ln0617.CBAL*ln0617.RATE)/总和(ln0617.CBAL)为LS1
从[dbo].[SIL_CM]SIL_CM
在LN0617.ACCTNO=SIL_CM.TK上连接[dbo].[LN0617]LN0617
其中ln0617.CBAL 0
和SIL_CM.TKTYPE='L'
分组
sil_cm.NT4
,LN0617.OFFCR
,ln0617.0
订购人
LN0617.OFFCR
,ln0617
您应该使用ln0617分组。很好,您可以勾选答案,然后请告知其他人问题是否已解决。(单击答案左侧的白色复选标记或“勾选”)