【发布时间】:2021-01-13 23:36:12
【问题描述】:
我有五个表,其中包含有关银行详细信息的人工数据。
我的目的是为男性客户和女性客户准备 2 个最常用的交易地点的查询。
为了做到这一点,我写了这个查询:
SELECT c.Gender,
lo.Name,
COUNT(c.Gender) OVER(PARTITION BY lo.Name) as TotalPerAccount
FROM dbo.Customer AS c
INNER JOIN dbo.Account AS a ON a.CustomerId=c.Id
INNER JOIN dbo.AccountDetails AS acc ON acc.AccountId=a.Id
INNER JOIN dbo.Location as lo ON lo.Id=acc.LocationId
ORDER BY c.Gender
但是上面的代码并没有给我很好的结果。实际上,我从每个位置都得到了一些结果。您可以在下面看到输出:
[![在此处输入图片描述][1]][1]
您还可以在此处查看帐户图以及表之间的关系。
[![在此处输入图片描述][2]][2]
那么任何人都可以帮我解决这个问题吗?最终输出应如下图所示。
[![在此处输入图片描述][3]][3]
【问题讨论】:
-
您的预期结果是什么?您不是在使用
GROUP BY而不是使用窗口化的COUNT(通过使用OVER)吗? -
我已经把图片最终输出应该是什么样子了
-
“我已经把图片最终输出应该是什么样子了” 当我发表评论时,图片不在那里。那个图像证实了我的怀疑;您应该使用
GROUP BY而不是使您的COUNT成为窗口聚合。
标签: sql-server join window-functions