我在其他地方看过,但没有找到答案,因此希望有人拥有更多的SQL经验可以帮助我解决这个问题!
我有以下投资组合表:
Ticker Company_ID Exposure
ABC 1 0.02
DEF 2 0.10
XYZ 3 0.01
GTS 3 0.01
以及以下信息表(其中有重复项以及其他信息,并且不能删除):
Company_ID Company_Name
1 Alpha
2 Defacto
2 Defacto
3 XeeWhy
3 XeeWhy
我希望结果的格式为
Company_ID Company_Name Sum(Exposure)
1 Alpha 0.02
2 Defacto 0.10
3 XeeWhy 0.02
我可以执行一些操作以从投资组合表中获取简单的总和,但这不包括公司名称:
Select Distinct Company_ID, Sum(Exposure)
From Portfolio
Group By Company_ID
但是每当我加入表以获取公司名称时,我都会得到重复的总和,具体取决于它们在信息表中出现的次数。
任何帮助或指针将不胜感激!
谢谢!
答案 0 :(得分:1)
您最简单的方法是使JOIN到您的公司表DISTINCT,如下所示:
Select p.Company_ID,
c.Company_name,
Sum(Exposure) as Exposure
From Portfolio p
INNER JOIN (
SELECT DISTINCT Company_id, Company_Name
FROM Companies) c
ON c.Company_id = p.Company_ID
Group By p.Company_ID,
c.Company_Name
答案 1 :(得分:0)
尝试加入一个子查询,该子查询获取不同的公司信息,一个子查询,获取分组的投资组合数据。
SELECT x1.company_id,
x1.company_name,
x2.exposure
FROM (SELECT DISTINCT
company_id,
company_name
FROM information) x1
LEFT JOIN (SELECT company_id,
sum(exposure) exposure
FROM portfolio
GROUP BY company_id) x2
ON x2.company_id = x1.company_id;
我不确定,是要结果中的所有公司还是仅要有投资组合数据的公司。如果需要后者,请将LEFT JOIN
更改为INNER JOIN
。
答案 2 :(得分:0)
尝试以下简单查询:
SELECT (SELECT TOP 1 Company_Name FROM CompanyTable
WHERE Company_ID = P.Company_ID) Company_Name,
Sum(Exposure)
FROM Portfolio P
GROUP BY Company_ID
答案 3 :(得分:0)
我使用了CTE来使聚合变得更简单:
SupportedMediaTypes