这是我的数据:
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',NULL)
我的VALUE列目标是知道我将用于pu的变量 我把它们放在一张桌子里
SELECT DISTINCT ParameterCode, Value
INTO Staging.tmpParameterCodes
FROM @TreatmentTableVariables;
SET @ParameterCodesToPivot = (SELECT '['+LEFT(ParameterCode, LEN(ParameterCode) - 2)
FROM (
SELECT ParameterCode + '],['
FROM Staging.tmpParameterCodes
FOR XML PATH ('')
) c (ParameterCode)
IF @ParameterCodesToPivot IS NULL SET @ParameterCodesToPivot='[Empty_TreatmentDW.InputParameter_Table]'
然后我根据存在于另一个表中的变量来调整这些变量:
SET @sqlquery = '
SELECT *
INTO
Staging.tmpTreatmentInputParameters
FROM
(
SELECT
tip.TreatmentID,
tip.ParameterCode,
tip.ClientCode,
tip.Value
FROM AnalyticsDW.TreatmentInputParameter tip
Where tip.TreatmentID between 1 and 1000
)p
PIVOT
(
MIN(Value)
FOR ParameterCode IN ( '+ @ParameterCodesToPivot +' )
) AS PVT'
数据透视的目标是获取@ParameterCodesToPivot中所有变量的每个treatmentID的值。我不知道在哪里提出这个条件。
从
更改数据透视表代码SELECT
tip.TreatmentID,
tip.ParameterCode,
tip.ClientCode,
tip.Value
FROM AnalyticsDW.TreatmentInputParameter tip
Where tip.TreatmentID between 1 and 1000
到
SELECT
tip.TreatmentID,
tip.ParameterCode,
tip.ClientCode,
tip.Value
FROM AnalyticsDW.TreatmentInputParameter tip
inner join Staging.tmpParameterCodes TPC
on tip.ParameterCode=TPC.ParameterCode
Where tip.TreatmentID between 1 and 1000
and TPC.Value!=NULL
但是这使得puvot表等于null。
如果需要,我可以尝试显示我的其他表格的样子,但是如果我没有把这个值!= NULL部分放在where语句中,我的代码就可以了。所以我想知道我是否在考虑错误的条件。
编辑: AnalyticsDW.TreatmentInputParameter数据看起来像
DECLARE @data TABLE(
[TreatmentID] varchar(100),
[ParameterCode] VARCHAR(100),
[ClientCode] VARCHAR(100),
[Value] varchar(100)
)
insert into @data values
('7','SourceCode','FR','NS')