2016-04-08 29 views
0

Bu tablo varPivot var olmayan biriyle

DECLARE @TreatmentTableVariables TABLE(ParameterCode VARCHAR(64), Value varchar(64)) 

INSERT @TreatmentTableVariables VALUES ('TripOriginLocationCode','AHO') 
INSERT @TreatmentTableVariables VALUES ('TripOriginCountryCode','IT') 

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) 

Ve sonra, pivot kodu

SET @sqlquery = ' 

    SELECT * 
    INTO 
    Staging.tmpTreatmentInputParameters 
    FROM 
     (
      SELECT 
       tip.TreatmentID, 
       tip.ParameterCode, 
       tip.ClientCode, 
       tip.Value 
      FROM AnalyticsDW.TreatmentInputParameter tip 
      left join Staging.tmpParameterCodes TPC 

      on tip.ParameterCode=TPC.ParameterCode 
      Where 
      --tip.TreatmentID between @MinTreatmentID and @MaxTreatmentID 
      --and 
      TPC.Value IS NOT NULL 
      and (TPC.Value=tip.Value or TPC.Value='''') 
      and tip.Value IS NOT NULL 
     )p 
     PIVOT 
     (
      MIN(Value) 
      FOR ParameterCode IN ('+ @ParameterCodesToPivot +') 
     ) 

     AS PVT' 

anahtar @ParameterCodesToPivot bir değer (TripOriginLocationCode) sahiptir olduğuna AnalyticsDW.TreatmentInputParameter.ParameterCode içinde mevcut değil.

Yani benim sonuç TreatmentID, ClientCode, TripOriginCountryCode, TripOriginLocationCode (bütün boş olan) AnalyticsDW.TreatmentInputParameter.ParameterCode

yılında TripOriginLocationCode hiçbir değeri olmadığı için pivot tablo o sütun için boş döndürür.

Sadece AnalyticsDW.TreatmentInputParameter var ParameterCOde sütunlar oluşturmak Ben pivotu sınırlamak nasıl

FOR ParameterCode IN ('+ @ParameterCodesToPivot +') 

kullandığım için

gerekirse bazı örnek verileri oluşturabilir

, sadece merak bu özel kod .. sorgunuzun Bazı doğru görünmüyor

+0

mevcut ParameterCodes için size sütunlarını vermelidir. Bunun gibi sınırlandırılmış bir değerler listesi geçemezsiniz. Dinamik sql kullanmanız veya ayrılmış bir liste yerine bir tablo kullanmanız gerekir. –

+0

hangi bölümden bahsediyorsunuz? –

+0

Bu bölüm "FOR ParameterCode IN ('+ @ParameterCodesToPivot +')". Bu sizin değerler listenize bakmıyor. Değişkenin değerine bakacaktır. –

cevap

0

boş sütun oluşturmak için bekleyebilirsiniz ki?

yerine kullanılması

SELECT DISTINCT 
     tip.ParameterCode 
INTO Staging.tmpParameterCodes 
FROM AnalyticsDW.TreatmentInputParameter tip 
     JOIN Staging.tmpParameterCodes TPC ON tip.ParameterCode = TPC.ParameterCode 
WHERE --tip.TreatmentID between @MinTreatmentID and @MaxTreatmentID 
     --and 
     TPC.Value IS NOT NULL 
     AND (TPC.Value = tip.Value 
      OR TPC.Value = '''') 
     AND tip.Value IS NOT NULL 

SELECT DISTINCT ParameterCode, Value 
    INTO Staging.tmpParameterCodes 
    FROM @TreatmentTableVariables; 

bu sadece değişkenlerin nasıl çalıştığı değil Yani pivot sorgusu