2017-05-10 8 views
0

以下に簡単なクエリがありますが、これはうまくいきます。変数の値に基づいて名前を付ける列

ただし、以下に示す名前のない2つの列があります。私は(0 t1.Quantity、)、ISNULL(t2.Quantity、0)

だから私のようなものを持っているでしょうdate2の

ISNULL @日付1 & @変数の値に基づいて列に名前を付けるしたいと思いますこの

ISNULL(t1.Quantity、0)[18年04月17]、ISNULL(t2.Quantity、0)[19年04月17]

これは可能ですか?

マイクエリ

declare @region nvarchar(10), @dateT1 date, @dateT2 date, @sd nvarchar(20) 
set @region= 'SF1611' 
set @dateT1 = '2017-04-18' 
set @dateT2 = '2017-04-19' 
set @sd = convert(nvarchar(20), @dateT1, 7) 

;with t1 as 
(
    select Id, Quantity 
    from myTable 
    where Region = @region and dateQ = @dateT1 
), t2 as 
(
    select Id, Quantity 
    from myTable 
    where Region = @region and dateQ = @dateT2 
) 
select coalesce(t1.Id, t2.Id) Id, isnull(t1.Quantity, 0), isnull(t2.Quantity,0), isnull(t1.Quantity, 0) - isnull(t2.Quantity,0) diff 
from t1 full outer join t2 
on t1.Id = t2.Id 
where isnull(t1.Quantity, 0) - isnull(t2.Quantity,0) <> 0 
+0

にコメントをする前に、それは有効なクエリであるかどうかを確認するためにprint結果にしようと、dynamic SQLを使用することができますうまく動作しますか?つまり、単純に動的SQLのパラメータで列をエイリアスします。 – scsimon

答えて

2

あなたは、あなたが上記のでしょう掲示何EXEC

declare @regionnvarchar(10), @dateT1 date, @dateT2 date, @sd nvarchar(20) 
set @region= 'SF1611' 
set @dateT1 = '2017-04-18' 
set @dateT2 = '2017-04-19' 
set @sd = convert(nvarchar(20), @dateT1, 7) 

;with t1 as 
(
    select Id, Quantity 
    from myTable 
    where Region = @region and dateQ = @dateT1 
), t2 as 
(
    select Id, Quantity 
    from myTable 
    where Region = @region and dateQ = @dateT2 
) 


declare @SQL VARCHAR(max) 

SET @SQL = 

'select coalesce(t1.Id, t2.Id) Id, isnull(t1.Quantity, 0) as ' + @dateT1 +', isnull(t2.Quantity,0) as ' [email protected] + ' ,(isnull(t1.Quantity, 0)- isnull(t2.Quantity,0)) as diff 
from t1 full outer join t2 
on t1.Id = t2.Id 
where isnull(t1.Quantity, 0) - isnull(t2.Quantity,0) <> 0' 

print (@SQL) 
--EXEC(@SQL) 
関連する問題