我有一项任务需要从TableB中选择来自TableA的PrimaryKey = PrimaryKey的列。
表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
这就是我要在选择列阶段使用的内容,但我想弄清楚是否有更好的方法,因为表别名会在整个程序中发生变化所以我不想每次都要调整它。
可能是我没有以正确的方式解决这个问题。
一些背景知识:
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表中的变量。在这种情况下,将使用BookingWeekday和Channel ID,因为它们不是NULL值。在不同的地方,我需要选择或分组这些变量。如果我只是从表中选择这些变量,我会使用:
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
但正如我之前所说,我想要考虑更多的解决方案,而不是创建上述代码的不同副本以用于分组或选择等。
只是在寻找关于我会做什么的想法。
答案 0 :(得分:0)
一种简单的非动态方法是:
SELECT * INTO #aTempTable
,
然后ALTER #aTempTable
删除您不想要的列。
然后SELECT * FROM #aTempTable