私は10行を挿入する一時テーブルを持っています。一時テーブル内の行に対して合計を実行し、上部に合計行をロールアップとして表示する方法はありますか。
彼らは次のようになります。
COL1 COL2 COL3
Jobs ALL SALARIES AVG SALARIES
19 $2,286,232.00 $285,779.00 -- THIS IS THE SUMMARY ROW AT THE TOP
0 0 0
1 $386,156.00 $96,539.00
2 $923,520.00 $153,920.00
1 $626,200.00 $469,650.00
7 $2,772,400.00 $440,000.00
0 0 0
3 $2,203,200.00 $61,200.00
1 $153,000.00 $102,000.00
3 $1,752,816.00 $213,783.00
1 $408,000.00 $204,000.00
行1は、ロールUP行で、すべてがこの順であることが必要であるが、第1回の行が合計行であり、あなたが見ることができるように、それは正しくありません。
ROW 1がこのようになります。
19 $11,682,164.00 $217636.50
私は SUM行っています(数値CONVERT((18,2)を、COL2))OVER()COL2 とAVGが(CONVERT (数値として(18,2)、col3))col3として
しかし、わかるとおり、正しくありません。
注:$とは、元のSQLにはありません。わかりやすくするためにそこに入れています。
最後に、ここでは、上記の準正しいを生成SQLは...だ
select TOP(9) PW_WAGE_LEVEL,
CONVERT(numeric(18,2),CASE WHEN WAGE_RATE_OF_PAY_TO = '0.00' THEN
CASE WHEN ANNUALIZED_SALARY = '0.00' THEN
CASE WHEN pw_unit_of_pay = 'year' THEN
CAST(REPLACE(WAGE_RATE_OF_PAY_FROM,',','') as numeric)
END
ELSE
CAST(REPLACE(MIDPOINT_WAGE_RATE,',','') as numeric)
END
ELSE
CASE WHEN WAGE_RATE_OF_PAY_TO = '0.00' THEN
CASE WHEN pw_unit_of_pay = 'hour' THEN
CAST(REPLACE(ANNUALIZED_SALARY,',','') as numeric)
ELSE
CAST(REPLACE(ANNUALIZED_SALARY,',','') as numeric)
END
ELSE
CASE WHEN WAGE_RATE_OF_PAY_TO > '0.00' THEN
CASE WHEN pw_unit_of_pay = 'hour' THEN
CASE WHEN ANNUALIZED_SALARY = '0.00' THEN
CAST(REPLACE(MIDPOINT_WAGE_RATE,',','') as numeric)
ELSE
CAST(REPLACE(ANNUALIZED_SALARY,',','') as numeric)
END
END
END
END
END * pw_wage_level) as ttlWagesPerLevel,
SUM(CONVERT(numeric(18,2),CASE WHEN WAGE_RATE_OF_PAY_TO = '0.00' THEN
CASE WHEN ANNUALIZED_SALARY = '0.00' THEN
CASE WHEN pw_unit_of_pay = 'year' THEN
CAST(REPLACE(WAGE_RATE_OF_PAY_FROM,',','') as numeric)
END
ELSE
CAST(REPLACE(MIDPOINT_WAGE_RATE,',','') as numeric)
END
ELSE
CASE WHEN WAGE_RATE_OF_PAY_TO = '0.00' THEN
CASE WHEN pw_unit_of_pay = 'hour' THEN
CAST(REPLACE(ANNUALIZED_SALARY,',','') as numeric)
ELSE
CAST(REPLACE(ANNUALIZED_SALARY,',','') as numeric)
END
ELSE
CASE WHEN WAGE_RATE_OF_PAY_TO > '0.00' THEN
CASE WHEN pw_unit_of_pay = 'hour' THEN
CASE WHEN ANNUALIZED_SALARY = '0.00' THEN
CAST(REPLACE(MIDPOINT_WAGE_RATE,',','') as numeric)
ELSE
CAST(REPLACE(ANNUALIZED_SALARY,',','') as numeric)
END
END
END
END
END) * pw_wage_level) OVER() as ttlWages,
SUM(pw_wage_level) OVER() as ttlPTFTJobs
from myFirstTempTable
where worksite_state = 'RI'
and JOB_TITLE like '%accountant%'
group by pw_unit_of_pay,pw_wage_level,ANNUALIZED_SALARY
UPDATE:
実際のスキーマは、TEMP表に、このようで来ている :
USE [myFirstTempDB]
GO
/****** Object: StoredProcedure [dbo].[usp_call_homepage_report] Script Date: 1/9/2017 10:07:52 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_call_homepage_report]
@wsCity varchar(255),
@wsState varchar(10),
@pwUOP varchar(10),
@jobTitle varchar(255)
AS
BEGIN
--CREATE A TEMP TABLE first... we need somewhere to stick the data
IF OBJECT_ID ('tempdb..#tempHomePageResults') is not null
drop table #tempHomePageResults
DECLARE @tempHomePageResults TABLE (
TotalNbrPTandFTJobs varchar(50),
TotalAnnualWages varchar(50),
TotalAvgSalary varchar(50))
INSERT INTO @tempHomePageResults
execute usp_row1_homePageReport @wsCity,@wsState,@pwUOP,@jobTitle
--BLANK ROW - FULL TIME SPECIALTY JOBS...
INSERT INTO @tempHomePageResults
(TotalNbrPTandFTJobs, TotalAnnualWages,TotalAvgSalary)
VALUES(1,0,0)
--SKILL LEVEL ROWS!
--FT JOB SKILL LEVEL ROWS!
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'Y',1
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'Y',2
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'Y',3
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'Y',4
--BLANK ROW - PART TIME SPECIALTY JOBS...
INSERT INTO @tempHomePageResults
(TotalNbrPTandFTJobs,
TotalAnnualWages,TotalAvgSalary)
VALUES(2,0,0)
--SKILL LEVEL ROWS!
--PT JOB SKILL LEVEL ROWS!
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'N',1
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'N',2
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'N',3
INSERT INTO @tempHomePageResults
execute usp_row1_6_HomePageReport @wsCity,@wsState,@pwUOP,@jobTitle,'N',4
SELECT * FROM @tempHomePageResults
END
注:これは正規化されていないことを理解していますが、CSVからSQL SERVERへのクイックインポートであり、TIME CRUNCHがあります。
はおそらく正しいデータ型を正規化するために適しだろう:
INT NUMERIC(18,2) NUMERIC(18,2)
は、正規化されたデータは、このようであると仮定:
COL1 COL2 COL3
Jobs ALL SALARIES AVG SALARIES
19 2286232.00 285779.00 -- THIS IS THE SUMMARY ROW AT THE TOP
0 0 0
1 386156.00 96539.00
2 923520.00 153920.00
1 626200.00 469650.00
7 2772400.00 440000.00
0 0 0
3 2203200.00 61200.00
1 153000.00 102000.00
3 1752816.00 213783.00
1 408000.00 204000.00
これは私を助けるのに役立ちます。
おかげ
2つのもの: 1)実際のスキーマとデータを提供します。 2)クエリをクリーンアップして、すべてのフォーマット情報を削除します。 答えを提供する方が簡単です。 –
UPDATEは役に立ちますか? –