2016-03-30 20 views
0

私は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

答えて

0

シンプルな、非動的なアプローチをすることです。

次にSELECT * FROM #aTempTable

関連する問題