0
DECLARE @newcolumns VARCHAR(2000);
WITH cte AS
(
SELECT
REPLACE(REPLACE(DateOut, ']', ''), '[', '') DateOut
FROM
#Columns
)
SELECT
@newcolumns = COALESCE(@newcolumns + ',' + '[' + DateOut + '] REAL',
'[' + DateOut + '] REAL')
FROM
cte
CREATE TABLE #newtable
(
Area NVARCHAR(50),
EqpType NVARCHAR(50),
@newcolumns
)
私は私が別の変数のように使用してみましたvarchar型の変数とテーブルの列を宣言し
[dec-1] real, [dec-2] real, [dec-3] real
のようなものを返す@newcolumns
変数このコードを持っている:
DECLARE @sql VARCHAR(4000)
SET @sql = '
CREATE TABLE #newtable
(
Area NVARCHAR(50),
EqpType NVARCHAR(50), ' + @newcolumns + ')
INSERT INTO #newtable
SELECT Area,EqpType,'[email protected]+'
FROM #littletable
PIVOT (MAX(Metric) FOR DateOut IN ('[email protected]+')) Z
GROUP BY Area,EqpType
ORDER BY AREA' EXEC (@sql)
そして、それを本当にうまくいっていますが、別の変数を使用せずに同じことを行う方法はありますか? @sql
のように?
なぜ大括弧を削除しますか? 'SELECT REPLACE(REPLACE(DateOut、 '' '、' ')、' ['、' ')DateOut FROM#Columns'を追加してそれらを追加しますか? – scsimon
select intoを使用すると、これをもっと簡単にすることができます。あなたはこれらすべてのフープを飛び越える必要はありません。 #littletableから* into #newtableを選択します。しかし、これは質問.....なぜあなたはあなたの一時テーブルの2番目のコピーを持っている必要がありますか?これは本当にXY問題の外観を持っています。 –
@scsimon、私が考えることができる1つの理由は、 'DateOut'のいくつかの値が角括弧を持つことがあり、そうでないものがあるかもしれないということです。それらがあればそれらを置き換えることでそれらを均一にすることができるので、それらが再び追加されたときにはそれぞれが1組のブラケットしか持たない。 –