2017-02-06 1 views
0

Ich arbeite derzeit mit einer Reihe von Werten von SSRS in meine Abfrage übergeben. In diesem Fall ist es eine unbestimmte Anzahl von Jahren. Zum Beispiel können die Werte "2014", "2015" und "2016" oder nur "2016" sein.PIVOT ohne Tisch?

Ich möchte so etwas wie eine PIVOT machen, wo ich eine Tabelle mit allen Jahren in einer einzigen Spalte erstellen kann, so dass ich mit einer anderen Tabelle jedes Monats kreuzen kann, um eine Jahres-/Monatsliste zu erhalten.

Irgendeine Idee, wie ich anfangen würde, damit zu beginnen?

Antwort

0

ich immer noch bin auf der Suche, wie man Behandle diese Situation, aber ich habe mein Skript in eine gespeicherte Prozedur umgewandelt und dann den Parameter als Argument an die gespeicherte Prozedur übergeben. Dies führte dazu, dass der Parameter als eine einzelne Saite übergeben wurde und ich ihn dann teilen konnte, wie es Nolan Shang vorgeschlagen hatte.

1

Ich denke, Sie brauchen eine Funktion der Split-String. Zum Beispiel:

1.String

DECLARE @para VARCHAR(max) 
SET @para='''2015'',''2016'',''2017''' 
SELECT n.yr FROM (VALUES(CONVERT(XML,'<n>'+REPLACE(@para,',','</n><n>')+'</n>'))) x(doc) 
CROSS APPLY(SELECT s.b.value('.','varchar(10)') AS yr FROM x.doc.nodes('n')s(b)) n 
 
yr 
----------- 
'2015' 
'2016' 
'2017' 

bin ich, dass Datentyp Sie Parameter nicht sicher. Wenn die Variable mit Spalten einer Tabelle kommt, können Sie cross apply verwenden. Wenn sie mehrere Variablen sind, können Sie nur wählen Sie verwenden, um von Werten

2.Variables

DECLARE @var1 VARCHAR(10)='2015', @var2 VARCHAR(10)='2016', @var3 VARCHAR(10)='2017' 
SELECT * FROM (VALUES(@var1),(@var2),(@var3)) t(yr) 

3. Säule

WITH paras(var1,var2,var3,var4)AS(
    SELECT '2015','2016','2016',null 
) 
SELECT t.yr FROM paras 
CROSS APPLY(VALUES(var1),(var2),(var3),(var4))t(yr) 
WHERE t.yr IS NOT NULL 
+0

Leider (möglicherweise ein Unterschied in der SSRS-Version) die Variable kommt nicht in einer Weise, die ich tun kann. Laut SQL Server Profiler sind die Daten eher wie: "2014", "2015", "2016" und nicht als eine einzelne Zeichenfolge. –