У меня есть задача, которая требует выбора столбцов из TableB, где PrimaryKey = PrimaryKey из TableA.Динамический выбор переменных из объединенной таблицы
Столбцы таблицы B могут меняться.
мне нужно выбрать все из TableB кроме «Columna» в PrimaryKey
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
Это то, что я собирался использовать в Select 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'
Я создаю эту таблицу с кучей переменных, где я буду использовать, чтобы увидеть значение динамической таблицы (@TreatmentTableVariables) для каждого экземпляра TreatmentID (первичный ключ) ,
Так результирующая таблица (Staging.tmpParameterCodes) будет выглядеть
DECLARE @goal TABLE(
ParameterCode varchar(100),
Value VARCHAR(100)
)
insert into @goal values
('BookingWeekday','Monday'),
('ChannelID',''),
('ExternalBookingID',NULL)
А то у меня есть большой длинный набор запросов, чтобы сделать различные вещи с X количеством заданных переменных, а затем переменные из этого @goal table. В этом случае будут использоваться идентификаторы BookingWeekday и Channel, поскольку они имеют значения NULL arent. В разных местах мне нужно будет выбрать или сгруппировать по этим переменным. Если бы я собирался только выбрать эти переменные из таблицы, я хотел бы использовать:
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 решения вместо того, чтобы создавать различные копии указанного выше кода для использования с группа по или выбрать и т.д.
Просто ищите идеи о том, что я буду делать.