2016-11-25 9 views
0

動的クエリを書くことを学んでいます。ピボットを使用した動的選択クエリ

私の質問は、以下の行が機能しない理由です。 @fxPair変数には赤で下線が引かれています。私の心の中では文字列変数なので、問題は見えませんか?これを行うより良い方法はありますか?

source pivot(max(Mvalue) for Currency in (@fxPair) as pvt 

マイクエリ:

declare @FundsT table (fund nvarchar(10)) 

insert into @FundsT 
    select SubPot 
    from tblF 
    where Fund = @FundCode 
    order by SubPot 

declare @fxPair nvarchar(max) = '' 

select @fxPair = @fxPair + '[' + Currency + '], ' 
from tblCurrency 
where DateH = @DateHld 
    and FundCode in (select fund from @FundsT) 
group by Currency 

set @fxPair = SUBSTRING(@fxPair, 1, len(@fxPair) - 1) 
--print @fxPair 

select * 
from 
    (select 
     FundCode, IssueGrpType, Currency, Sum(MktValDirty) Mvalue 
    from 
     Holdings_SS 
    where 
     DateHolding = @DateHld 
     and FundCode in (select fund from @FundsT) 
    group by 
     FundCode, IssueGrpType, Currency) source 
pivot 
    (max(Mvalue) for Currency in (@fxPair) as pvt 
order by 
    FundCode, IssueGrpType 
+0

このクエリについての質問は、今日のこの質問でも非常に多くの問題があります。あなたのコードは '... in( '[x]、[y]')'と評価され、あなたが望むものは '... in( '[x]'、 '[y]')'と評価されます。 – HoneyBadger

答えて

1

あなたが旋回した列の文字列を渡すことはできません。変数を使わずに通常のクエリで文字列を書くだけでチェックできます。 正しいアプローチがこの記事で説明されています。 Dynamic pivot

クエリ全体が文字列である必要があります。あなたの場合は、次のようなものを試してください。

DECLARE @dpq AS NVARCHAR(MAX) 
SET @dpq = 'select * 
from 
    (select 
     FundCode, IssueGrpType, Currency, Sum(MktValDirty) Mvalue 
    from 
     Holdings_SS 
    where 
     DateHolding = @DateHld 
     and FundCode in (select fund from @FundsT) 
    group by 
     FundCode, IssueGrpType, Currency) source 
pivot 
    (max(Mvalue) for Currency in (' + @fxPair + ') as pvt 
order by 
    FundCode, IssueGrpType' 
EXEC sp_executesql @dpq 
関連する問題