1

私の問題は、正規化されたテーブルから非正規化 (OLAP) テーブルを作成する方法です。

いくつかのデータを含む OLTP データベースがあります。以下のチャートを参照してください。

OLTP_データベース図

テーブル "Variable"、"Variable_Value"、および "Variable_Sample" に特に注意してください。

変数:

変数

変数値:

ここに画像の説明を入力

変数_サンプル:

ここに画像の説明を入力

テーブル「Variable_Sample」を作成するスクリプトは以下を参照してください。

    ALTER PROCEDURE [dbo].[VarSample]
AS
BEGIN
    truncate table UIR_DB.dbo.Variable_Sample

Declare params cursor for 
 Select distinct id_variable from UIR_DB.dbo.Variable_Value
open params
Declare @idparam int
Declare @csql nvarchar(max)  = ''
Declare @csql2 nvarchar(max)  = ''
Declare @i int = 1
fetch next from params into @idparam
while @@FETCH_STATUS = 0
begin
Select @csql2 = @csql2 + ', param' +LTrim(Str(@i))
Select @csql = @csql +  ' (Select value as param'+LTrim(Str(@i))+' from UIR_DB.dbo.Variable_Value where id_variable = '+LTrim(Str(@idparam))+') a'+LTrim(Str(@i))+' cross join'
Set @i = @i+1
fetch next from params into @idparam
end
Select @csql = '
Insert INTO UIR_DB.dbo.Variable_Sample SELECT id, CAST(SubString(Param,6,LEN(Param)-5) as int) param_id, param_val
FROM 
(Select ROW_Number() over(order by '+SubString(@csql2,2,LEN(@csql2)-1)+') id, '+SubString(@csql2,2,LEN(@csql2)-1)+' from '+SubString(@csql,1,LEN(@csql)-11) + ') p
UNPIVOT
   (param_val FOR Param IN 
      ('+SubString(@csql2,2,LEN(@csql2)-1)+')
)AS unpvt
'

print @csql
exec sp_executesql @csql
delete from Sample
Insert into Sample select distinct UIR_DB.dbo.Variable_Sample.idsample from UIR_DB.dbo.Variable_Sample
close params
deallocate params
END

次の形式の「Variable_Sample_Olap」のようなテーブルを作成する必要があります。

Variable_Sample_Olap:

ここに画像の説明を入力

(もちろん、variable3、...、variableN であれば、「Variable_Sample_Olap」の N 列になります。)

Variable_Sample_Olap で Variable_Sample を変換するスクリプトを手伝ってくれる人はいますか?

4

0 に答える 0