私はTableBからTableAからPrimaryKey = PrimaryKeyの列を選択する必要があります。結合されたテーブルから変数を動的に選択
表Bの列は変更される可能性があります。
は、私が「ColumnA」主キー以外TableBのからすべてを選択する必要が
DECLARE @COLUMNS VARCHAR(1000)
SELECT @Columns = SubString (( SELECT + ', ' + 'Alias'+ QUOTENAME(Column_name)
from INFORMATION_SCHEMA.columns
WHERE Table_name ='TableB'
AND COLUMN_NAME !='ColumnB'
FOR XML PATH ('')), 3, 1000)
print @COLUMNS
これは私が選択した列の段階で使用するつもりだったものですが、私はよりよいがある場合に把握しようとしていますテーブルのエイリアスはプログラム全体で変わるので、毎回これを調整する必要はありません。
私はこのことについてまったく正しいことはしていないかもしれません。
いくつかの背景:
DECLARE @TreatmentTableVariables TABLE(ParameterCode VARCHAR(64), Value varchar(64))
INSERT @TreatmentTableVariables VALUES ('SourceCode','NS')
INSERT @TreatmentTableVariables VALUES ('TripFirstTravelDate','')
INSERT @TreatmentTableVariables VALUES ('PaxType','')
INSERT @TreatmentTableVariables VALUES ('ChannelID','')
INSERT @TreatmentTableVariables VALUES ('RoleName','')
INSERT @TreatmentTableVariables VALUES ('TripOriginLocationCode',NULL)
INSERT @TreatmentTableVariables VALUES ('TripDestinationLocationCode',NULL)
INSERT @TreatmentTableVariables VALUES ('ExternalBookingID',NULL)
INSERT @TreatmentTableVariables VALUES ('NumberOfPassengers',NULL)
INSERT @TreatmentTableVariables VALUES ('FareClass',NULL)
INSERT @TreatmentTableVariables VALUES ('TripType',NULL)
INSERT @TreatmentTableVariables VALUES ('BookingWeekday','Monday')
INSERT @TreatmentTableVariables VALUES ('TripOriginCountryCode','')
SELECT DISTINCT ParameterCode, Value
INTO Staging.tmpParameterCodes
FROM @TreatmentTableVariables;
SET @ParameterCodesToPivot = (SELECT '['+LEFT(ParameterCode, LEN(ParameterCode) - 2)
FROM (
SELECT ParameterCode + '],['
FROM Staging.tmpParameterCodes
where Value IS NOT NULL
FOR XML PATH ('')
) c (ParameterCode)
)
SET @sqlquery = '
SELECT *
INTO
Staging.tmpTreatmentInputParameters
FROM
(
SELECT
tip.TreatmentID,
tip.ParameterCode,
tip.ClientCode,
tip.Value
FROM AnalyticsDW.TreatmentInputParameter tip
inner join Staging.tmpParameterCodes TPC
on tip.ParameterCode=TPC.ParameterCode
--join Staging.tmpFlattenTreatmentData1 t on tip.TreatmentID=t.TreatmentID
Where
--tip.TreatmentID between @MinTreatmentID and @MaxTreatmentID
--and
TPC.Value IS NOT NULL
and (TPC.Value=tip.Value or TPC.Value='''')
)p
PIVOT
(
MIN(Value)
FOR ParameterCode IN ('+ @ParameterCodesToPivot +')
)
AS PVT'
私はTreatmentID(プライマリキー)のインスタンスごとに(@TreatmentTableVariables)動的テーブルの値を参照するために使用される変数の束と、このテーブルを作成してい。
だから、結果のテーブル(Staging.tmpParameterCodes)は
DECLARE @goal TABLE(
ParameterCode varchar(100),
Value VARCHAR(100)
)
insert into @goal values
('BookingWeekday','Monday'),
('ChannelID',''),
('ExternalBookingID',NULL)
のようになります。そして、私はその後、大きな長いセット変数のX番号と異なることを行うために、クエリのセット、およびこれからの変数を持っています@goalテーブル。この場合、NULL値ではないため、BookingWeekdayとChannel IDが使用されます。別の場所では、これらの変数を選択またはグループ化する必要があります。
DECLARE @COLUMNS VARCHAR(1000)
SELECT @Columns = SubString (( SELECT + ', ' + 'Alias'+ QUOTENAME(Column_name)
from INFORMATION_SCHEMA.columns
WHERE Table_name ='goal'
AND COLUMN_NAME !='ColumnB'
FOR XML PATH ('')), 3, 1000)
print @COLUMNS
をしかし、私はもっとversitle解決策を考えるの代わりに使用するために、上記のコードの異なるコピーを作成したい私が言ったように前に:私はテーブルからこれらの変数を選択するつもりだった場合、私が使用しますグループ別に選択するか、または選択してください。
私がやることについてアイデアを探しています。あなたがしたくない列を削除する
SELECT * INTO #aTempTable
、
、その後ALTER #aTempTable
: