2010-11-28 8 views
3

私は、パラメータのユーザーの選択に基づいて、クエリ内の列に動的に名前を付けることを望んでいます。T-SQLの "As"ステートメントを使用して関数/式を使用して列に名前を付けることはできますか?

私の考えは、ユーザの選択に基づいて、カラムはカラム/フィールド指定の後ろにある "As"を介して命名されたということでした。ここで

は私の例である:だから

Select Distinct 

Case @DateParam 

When 'Created' Then Convert(Varchar, h.wmhd_cre_date, 101) 

When 'Action' Then Convert(Varchar, d.wmdt_date, 101) 

End As CONCATENATE(@DateParm + 'Date'), 

ユーザーは「作成した」日付のパラメータを選択した場合、その後、列ヘッダは「CreatedDateに」を示すだろう。しかし、「アクション」の日付のパラメータを選択した場合、列の名前は「ActionDate」になります。

私は以前も同様のことを試みてきましたが、私は「As」ステートメントの後に式を置くことができないという考えを始めています。これは本当ですか、誰にもアイディアがありますか?

答えて

2

これは間違いありません。エイリアス化された識別子は、式によって生成されないことがあります。

ただし、このような何かを行うことができます:

SELECT DISTINCT 
    CASE WHEN @DateParam = 'Created' THEN CONVERT(varchar, h.wmhd_cre_date, 101) END AS CreatedDate, 
    CASE WHEN @DateParam = 'Action' THEN CONVERT(varchar, h.wmdt_date, 101) END AS ActionDate 

あなたは絶対にあなたが説明したオリジナルの方法で列を返すようにしている場合、あなたが使用する必要があります動的SQLを(例えば、EXECまたはEXEC sp_executesql

+0

フィル、先端をありがとう!私はあなたが過去にいくつかの点で上記のことを試してみたと思ったが、間違っていたに違いない。私はすでに "ケース"の構築が完了しているので、あなたのオプションは完璧なマッチのようです。 –

+0

これは助けてくれてうれしい! –

1

string.Exampleとしてクエリに渡して使用EXEC

declare @fnameParam varchar(50) 
set @fnameParam = 'FirstName' 
EXEC 'SELECT FName AS ' + @fnameParam + ' FROM Table1' 
+0

ああ、それは私が大好きなトリッキーです。その知識をありがとうアリ...私はそれを賢く、頻繁に使用します。 –

関連する問題