带有条件的枢轴表

时间:2016-03-28 16:34:39

标签: sql-server pivot

这是我的数据:

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')

0 个答案:

没有答案