Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
qman
Constraint Violating Yak Guru
442 Posts |
Posted - 2009-12-22 : 12:19:11
|
| I am trying to add a column called "company total" to the below query:select c.symbol, hc.holding_company_name, SUM(CAST(bi.volume AS bigint)) AS vol from holding_company hcinner join company c on c.holding_company_id = hc.holding_company_idinner join invoices bi on bi.company_id = c.company_idgroup by hc.holding_company_id, c.symbol, hc.holding_company_nameorder by hc.holding_company_nameThis new column will create a total based on the volumes from a same holding_company_name.Below is sample data (including how I would want the new column to look):symbol holding_company_name vol new column AA Acadia Life 1000 1000BB ACE Group 2000 2000CC AEGON USA Inc 4000 15000DD AEGON USA Inc 5000 15000EE AEGON USA Inc 6000 15000 |
|
|
vijayisonly
Master Smack Fu Yak Hacker
1836 Posts |
Posted - 2009-12-22 : 12:48:36
|
Try this..;WITH Base_query (symbol,holding_company_name,vol)AS(select c.symbol, hc.holding_company_name, SUM(CAST(bi.volume AS bigint)) AS vol from holding_company hcinner join company c on c.holding_company_id = hc.holding_company_idinner join invoices bi on bi.company_id = c.company_idgroup by hc.holding_company_id, c.symbol, hc.holding_company_nameorder by hc.holding_company_name)select a.symbol,a.holding_company_name,a.vol,t.new_columnfrom Base_query a cross apply(select holding_company_name,sum(vol) as new_column from Base_querywhere holding_company_name = a.holding_company_namegroup by holding_company_name) t |
 |
|
|
DP978
Constraint Violating Yak Guru
269 Posts |
Posted - 2009-12-22 : 12:51:57
|
| select c.symbol, hc.holding_company_name, SUM(CAST(bi.volume AS bigint)) AS vol, a.vol as Total_Volume from holding_company hcinner join company c on c.holding_company_id = hc.holding_company_idinner join invoices bi on bi.company_id = c.company_idInner Join (select hc.holding_company_name, SUM(CAST(bi.volume AS bigint)) AS vol from holding_company hcinner join invoices bi on bi.company_id = c.company_idgroup by hc.holding_company_id, hc.holding_company_name) a on a.holding_company_name = hc.holding_company_namegroup by hc.holding_company_id, c.symbol, hc.holding_company_nameorder by hc.holding_company_name |
 |
|
|
jimf
Master Smack Fu Yak Hacker
2875 Posts |
Posted - 2009-12-22 : 12:52:39
|
| DECLARE @Table Table (Symbol char(2), Company varchar(50),Vol int)INSERT INTO @tableSELECT 'AA','Acadia Life', 1000 UNION ALL --1000SELECT 'BB','ACE Group', 2000 UNION ALL --2000SELECT 'CC','AEGON USA Inc', 4000 UNION ALL --15000SELECT 'DD','AEGON USA Inc', 5000 UNION ALL --15000SELECT 'EE','AEGON USA Inc', 6000 -- 15000select symbol,company,vol,[NewAmount] = SUM (Vol) Over (partition BY Company) from @tableJimEveryday I learn something that somebody else already knew |
 |
|
|
vijayisonly
Master Smack Fu Yak Hacker
1836 Posts |
Posted - 2009-12-22 : 12:54:58
|
quote: Originally posted by jimf DECLARE @Table Table (Symbol char(2), Company varchar(50),Vol int)INSERT INTO @tableSELECT 'AA','Acadia Life', 1000 UNION ALL --1000SELECT 'BB','ACE Group', 2000 UNION ALL --2000SELECT 'CC','AEGON USA Inc', 4000 UNION ALL --15000SELECT 'DD','AEGON USA Inc', 5000 UNION ALL --15000SELECT 'EE','AEGON USA Inc', 6000 -- 15000select symbol,company,vol,[NewAmount] = SUM (Vol) Over (partition BY Company) from @tableJimEveryday I learn something that somebody else already knew
Simple and brilliant. Never occurred to me.. |
 |
|
|
qman
Constraint Violating Yak Guru
442 Posts |
Posted - 2009-12-22 : 13:26:45
|
| Thanks to all.....I was able to use the Over/Partition suggested by jimf to accomplish what I needed.Thanks again! |
 |
|
|
jimf
Master Smack Fu Yak Hacker
2875 Posts |
Posted - 2009-12-22 : 13:27:56
|
OVER is definitely one of those tools that I often forget I have. JimEveryday I learn something that somebody else already knew |
 |
|
|
|
|
|
|
|