2016-09-29 2 views
1

多くの作業の後、私は自分が望む結果で動的ピボットクエリを作成することができました。ビュー/ストアドプロシージャへの動的ピボットクエリ?

今、パラメータを送信してクエリをフィルタできるようにする必要があります。通常、私はSELECT * FROMを使用し、WHERE節で私のパラメータをフィルタリングするビューを作成します。動的ピボットクエリからビューを作成することはできないので、この問題を解決するためには助けが必要だと私は読んでいます。

これは私のSQLです:

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT ',' + QUOTENAME(p.tag) 
        FROM (((ZUS_Monatsreport_Kopf k 
        LEFT JOIN ZUS_Monatsreport_Pos p ON k.Id = p.Id_Kopf) 
        LEFT JOIN ADR_Adressen a ON k.Adresse = a.AdressNrADR) 
        LEFT JOIN ADR_GruppenLink gl ON a.AdressNrADR = gl.AdressNrADR) 
        LEFT JOIN ADR_Gruppen g ON gl.GruppeADR = g.GruppeADR 
        GROUP BY p.Tag 
        ORDER BY p.tag 
        FOR XML PATH (''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

SET @query = 'SELECT AdressNrADR,Monat,Id_kopf,Name,Artikel, '+ @cols + ' FROM 
      (
       SELECT a.AdressNrADR,k.monat,p.Id_kopf,a.name + '' ''+ a.vorname as Name,p.Artikel, p.Tag,CASE WHEN CAST(p.wert AS VARCHAR(10)) = '''' THEN CAST(p.Menge AS VARCHAR(10)) ELSE CAST(p.Wert AS VARCHAR(10)) END AS Menge 
       FROM (((ZUS_Monatsreport_Kopf k 
       LEFT JOIN ZUS_Monatsreport_Pos p ON k.Id = p.Id_Kopf) 
       LEFT JOIN ADR_Adressen a ON k.Adresse = a.AdressNrADR) 
       LEFT JOIN ADR_GruppenLink gl ON a.AdressNrADR = gl.AdressNrADR) 
       LEFT JOIN ADR_Gruppen g ON gl.GruppeADR = g.GruppeADR 
      ) x 
      pivot 
      (max(menge) 
       for tag in (' [email protected] +') 
      ) p ' 

execute(@query) 

これは私の結果はどのように見えるかです:今、私はこのSQLの周りに選択させることができるようとするために言う必要が

enter image description here

SELECT * 
FROM mypivotquery 
WHERE AdressNrADR = 10640 (<-parameter) and Monat = 2 (<-parameter) 

私が私が探しているものを説明することができれば幸いですあなたたちは私を助けることができるため、その:)

おかげ

答えて

1

をあなたは

SET @query = 'SELECT AdressNrADR,Monat,Id_kopf,Name,Artikel, '+ @cols + ' FROM 
     (
      SELECT a.AdressNrADR,k.monat,p.Id_kopf,a.name + '' ''+ a.vorname as Name,p.Artikel, p.Tag,CASE WHEN CAST(p.wert AS VARCHAR(10)) = '''' THEN CAST(p.Menge AS VARCHAR(10)) ELSE CAST(p.Wert AS VARCHAR(10)) END AS Menge 
      FROM (((ZUS_Monatsreport_Kopf k 
      LEFT JOIN ZUS_Monatsreport_Pos p ON k.Id = p.Id_Kopf) 
      LEFT JOIN ADR_Adressen a ON k.Adresse = a.AdressNrADR) 
      LEFT JOIN ADR_GruppenLink gl ON a.AdressNrADR = gl.AdressNrADR) 
      LEFT JOIN ADR_Gruppen g ON gl.GruppeADR = g.GruppeADR 
      WHERE a.AdressNrADR = 10640 (<-parameter) and Monat = 2 (<-parameter) 
     ) x 
      pivot 
      (max(menge) 
      for tag in (' [email protected] +') 
     ) p ' 
にご SET @Query文を変更する、動的なクエリにWHERE条件を追加することができます
関連する問題