0

データ表現の問題を解決してください。

次のデータ プレゼンテーションを作成する SQL スクリプトがあります。

Declare params cursor for 
Select distinct id_variable from [UIR_DB].[dbo].[Variable_Values]
open params
Declare @idparam int
Declare @csql nvarchar(max)  = ''
Declare @csql2 nvarchar(max)  = ''
declare @csq13 nvarchar(max) = ''
Declare @i int = 1
fetch next from params into @idparam
while @@FETCH_STATUS = 0
begin
Select @csql2 = @csql2 +', id_var'+LTRIM(Str(@i))+ ', param' +LTrim(Str(@i))
Select @csql =  ' (Select id_variable as id_var'+LTrim(Str(@i))+', value as param'+LTrim(Str(@i))+' from
[UIR_DB].[dbo].[Variable_Values] where id_variable = '+LTrim(Str(@idparam))+') a'+LTrim(Str(@i))+'
cross join'+@csql
Set @i = @i+1
fetch next from params into @idparam
end
Select @csql = 'Select '+SubString(@csql2,2,LEN(@csql2)-1)+' from
'+SubString(@csql,1,LEN(@csql)-11)+'order by'+SubString(@csql2,2,LEN(@csql2)-1)
print @csql
exec sp_executesql @csql
close params
deallocate params

スクリプト 1 を実行

SQL に関する私の知識はそれほど多くないので、大きな問題にならない場合は、Script1 の結果から次のデータ表現を作成するスクリプトが必要です。 新しいスクリプトの結果

4

2 に答える 2

0

これがお役に立てば幸いです。これは 2 ステップで実行できます

1) 結果セット内のレコードの自動インクリメント番号を生成する

WITH CTE
AS
(
  SELECT ROW_NUMBER() OVER(ORDER BY id_var1) AS id_sample,
  [id_var1], [param1],[id_var2], [param2]
  FROM Table1
)

注:コードに増分番号を追加できます。上記は単なる例です

2)以下のクエリを使用して、目的の結果を取得します

SELECT 
c.id_sample,
c.id_variable
,c.value
FROM CTE
CROSS APPLY
(
  VALUES
  (id_sample,id_var1,param1),
  (id_sample,id_var2,param2)
)c(id_sample,id_variable,value)
于 2013-04-24T12:17:26.670 に答える
0

これを試して:

最初の結果セットを 1 つの一時テーブルに追加し、次のクエリを実行できます。

必要に応じてエイリアスまたは ID を追加できます。

SELECT id_var1,Param1 FROM [UIR_DB].[dbo].[Variable_Values]
UNION
SELECT id_var2,Param2 FROM [UIR_DB].[dbo].[Variable_Values]
于 2013-04-24T11:48:39.940 に答える