Hi all,
Is there any obvious way to sum only certain rows. I suppose it's
similar to cube or rollup but I can't get either of them to work. what
I basically have is this...
CREATE TABLE #TempTable (
[GLD_ACCTNG_PER] INT,
[OrderNum] INT,
[SummaryDescript ion] varchar(50),
[SummaryAmount] decimal
)
INSERT INTO #TempTable
SELECT GLD_ACCTNG_PER,
'OrderNum' = CASE
WHEN (ACT_GL_NO between '4000' and '4399') THEN 1
WHEN ((ACT_GL_NO between '4400' and '4499') and (ACT_GL_NO <>
'4440')) THEN 2
WHEN (ACT_GL_NO = '4440') THEN 3
WHEN (ACT_GL_NO between '5000' and '5399') THEN 4
WHEN ((ACT_GL_NO between '5400' and '5499') and (ACT_GL_NO <>
'5440')) THEN 5
WHEN (ACT_GL_NO = '5440') THEN 6
WHEN ((ACT_GL_NO between '5850' and '5999')) THEN 7
WHEN ((ACT_GL_NO between '6000' and '6009')) THEN 8
ELSE 10000
END,
'SummaryDescrip tion' = CASE
WHEN (ACT_GL_NO between '4000' and '4399') THEN 'TotExtSales'
WHEN ((ACT_GL_NO between '4400' and '4499') and (ACT_GL_NO <>
'4440')) THEN 'TotIntSales'
WHEN (ACT_GL_NO = '4440') THEN 'InterMarkUp'
WHEN (ACT_GL_NO between '5000' and '5399') THEN 'TotExtCosts'
WHEN ((ACT_GL_NO between '5400' and '5499') and (ACT_GL_NO <>
'5440')) THEN 'TotIntCosts'
WHEN (ACT_GL_NO = '5440') THEN 'MarkUpCharges'
WHEN ((ACT_GL_NO between '5850' and '5999')) THEN 'Adjustments'
WHEN ((ACT_GL_NO between '6000' and '6009')) THEN 'Labour Costs'
ELSE 'Empty'
END,
'SummaryAmount' = SUM(CASE
WHEN (ACT_GL_NO between '4000' and '4399') THEN GLD_Total
WHEN ((ACT_GL_NO between '4400' and '4499') and (ACT_GL_NO <>
'4440')) THEN GLD_Total
WHEN (ACT_GL_NO = '4440') THEN GLD_Total
WHEN (ACT_GL_NO between '5000' and '5399') THEN GLD_Total
WHEN ((ACT_GL_NO between '5400' and '5499') and (ACT_GL_NO <>
'5440')) THEN GLD_Total
WHEN (ACT_GL_NO = '5440') THEN GLD_Total
WHEN ((ACT_GL_NO between '5850' and '5999')) THEN GLD_Total
WHEN ((ACT_GL_NO between '6000' and '6009')) THEN GLD_Total
ELSE 0
END)
FROM test.dbo.Financ ePeriod
WHERE ....9varios where clauses....
GROUP BY ACT_GL_NO, GLD_ACCTNG_PER
Now the data from this ~temp table is selected like this.....
SELECT [Summary Description],
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'01') THEN
[Summary Amount] ELSE 0 END) AS '200401',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'02') THEN
[Summary Amount] ELSE 0 END) AS '200402',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'03') THEN
[Summary Amount] ELSE 0 END) AS '200403',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'04') THEN
[Summary Amount] ELSE 0 END) AS '200404',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'05') THEN
[Summary Amount] ELSE 0 END) AS '200405',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'06') THEN
[Summary Amount] ELSE 0 END) AS '200406',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'07') THEN
[Summary Amount] ELSE 0 END) AS '200407',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'08') THEN
[Summary Amount] ELSE 0 END) AS '200408',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'09') THEN
[Summary Amount] ELSE 0 END) AS '200409',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'10') THEN
[Summary Amount] ELSE 0 END) AS '200410',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'11') THEN
[Summary Amount] ELSE 0 END) AS '200411',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'12') THEN
[Summary Amount] ELSE 0 END) AS '200412'
FROM #TempTable
WHERE .....various where clauses......
GROUP BY [Order Num], [Summary Description]
ORDER BY [Order Num]
Now this is obviously crosstabbed to give months as rows. the problem
is that I need to sum together various rows either on the insert or
the select and still be able to crosstab them by month i.e on the
insert rows with OrderNum need to be summed together and stored as a
different summarydescript ion. this has to be done for various
combinations of ordernums (not all of them are in this post).
can anyone suggest a tidy way of doing this? Assuming you understand
what I'm waffling on about of course :)
Thanks.
Is there any obvious way to sum only certain rows. I suppose it's
similar to cube or rollup but I can't get either of them to work. what
I basically have is this...
CREATE TABLE #TempTable (
[GLD_ACCTNG_PER] INT,
[OrderNum] INT,
[SummaryDescript ion] varchar(50),
[SummaryAmount] decimal
)
INSERT INTO #TempTable
SELECT GLD_ACCTNG_PER,
'OrderNum' = CASE
WHEN (ACT_GL_NO between '4000' and '4399') THEN 1
WHEN ((ACT_GL_NO between '4400' and '4499') and (ACT_GL_NO <>
'4440')) THEN 2
WHEN (ACT_GL_NO = '4440') THEN 3
WHEN (ACT_GL_NO between '5000' and '5399') THEN 4
WHEN ((ACT_GL_NO between '5400' and '5499') and (ACT_GL_NO <>
'5440')) THEN 5
WHEN (ACT_GL_NO = '5440') THEN 6
WHEN ((ACT_GL_NO between '5850' and '5999')) THEN 7
WHEN ((ACT_GL_NO between '6000' and '6009')) THEN 8
ELSE 10000
END,
'SummaryDescrip tion' = CASE
WHEN (ACT_GL_NO between '4000' and '4399') THEN 'TotExtSales'
WHEN ((ACT_GL_NO between '4400' and '4499') and (ACT_GL_NO <>
'4440')) THEN 'TotIntSales'
WHEN (ACT_GL_NO = '4440') THEN 'InterMarkUp'
WHEN (ACT_GL_NO between '5000' and '5399') THEN 'TotExtCosts'
WHEN ((ACT_GL_NO between '5400' and '5499') and (ACT_GL_NO <>
'5440')) THEN 'TotIntCosts'
WHEN (ACT_GL_NO = '5440') THEN 'MarkUpCharges'
WHEN ((ACT_GL_NO between '5850' and '5999')) THEN 'Adjustments'
WHEN ((ACT_GL_NO between '6000' and '6009')) THEN 'Labour Costs'
ELSE 'Empty'
END,
'SummaryAmount' = SUM(CASE
WHEN (ACT_GL_NO between '4000' and '4399') THEN GLD_Total
WHEN ((ACT_GL_NO between '4400' and '4499') and (ACT_GL_NO <>
'4440')) THEN GLD_Total
WHEN (ACT_GL_NO = '4440') THEN GLD_Total
WHEN (ACT_GL_NO between '5000' and '5399') THEN GLD_Total
WHEN ((ACT_GL_NO between '5400' and '5499') and (ACT_GL_NO <>
'5440')) THEN GLD_Total
WHEN (ACT_GL_NO = '5440') THEN GLD_Total
WHEN ((ACT_GL_NO between '5850' and '5999')) THEN GLD_Total
WHEN ((ACT_GL_NO between '6000' and '6009')) THEN GLD_Total
ELSE 0
END)
FROM test.dbo.Financ ePeriod
WHERE ....9varios where clauses....
GROUP BY ACT_GL_NO, GLD_ACCTNG_PER
Now the data from this ~temp table is selected like this.....
SELECT [Summary Description],
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'01') THEN
[Summary Amount] ELSE 0 END) AS '200401',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'02') THEN
[Summary Amount] ELSE 0 END) AS '200402',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'03') THEN
[Summary Amount] ELSE 0 END) AS '200403',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'04') THEN
[Summary Amount] ELSE 0 END) AS '200404',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'05') THEN
[Summary Amount] ELSE 0 END) AS '200405',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'06') THEN
[Summary Amount] ELSE 0 END) AS '200406',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'07') THEN
[Summary Amount] ELSE 0 END) AS '200407',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'08') THEN
[Summary Amount] ELSE 0 END) AS '200408',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'09') THEN
[Summary Amount] ELSE 0 END) AS '200409',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'10') THEN
[Summary Amount] ELSE 0 END) AS '200410',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'11') THEN
[Summary Amount] ELSE 0 END) AS '200411',
SUM(CASE (GLD_ACCTNG_PER ) WHEN convert(int, @Period+'12') THEN
[Summary Amount] ELSE 0 END) AS '200412'
FROM #TempTable
WHERE .....various where clauses......
GROUP BY [Order Num], [Summary Description]
ORDER BY [Order Num]
Now this is obviously crosstabbed to give months as rows. the problem
is that I need to sum together various rows either on the insert or
the select and still be able to crosstab them by month i.e on the
insert rows with OrderNum need to be summed together and stored as a
different summarydescript ion. this has to be done for various
combinations of ordernums (not all of them are in this post).
can anyone suggest a tidy way of doing this? Assuming you understand
what I'm waffling on about of course :)
Thanks.
Comment