Versucht man eine variable innerhalb einer case-Anweisung.

Ich bin versucht, zu aktualisieren ein Datum Maßtabelle von der Bilanzierungs-Jahre-Tabelle der unser ERP-System. Wenn ich die folgende Abfrage ausführen:

SELECT fcname FYName
      ,min(fdstart) YearStart
      ,max(fdend) YearEnd
      ,max(fnnumber) PeriodCount
FROM M2MData01.dbo.glrule GLR
GROUP BY fcname

Bekomme ich folgende Daten:

FYName            YearStart                   YearEnd                 PeriodCount
FY 2000                 1/1/2000 12:00:00 AM    12/31/2000 12:00:00 AM  12
FY 2001                 1/1/2001 12:00:00 AM    12/31/2001 12:00:00 AM  12
FY 2002                 1/1/2002 12:00:00 AM    12/31/2002 12:00:00 AM  12
FY 2003                 1/1/2003 12:00:00 AM    12/31/2003 12:00:00 AM  12
FY 2004                 1/1/2004 12:00:00 AM    12/31/2004 12:00:00 AM  12
FY 2005                 1/1/2005 12:00:00 AM    12/31/2005 12:00:00 AM  12
FY 2006                 1/1/2006 12:00:00 AM    12/31/2006 12:00:00 AM  12
FY 2007                 1/1/2007 12:00:00 AM    12/31/2007 12:00:00 AM  12
FY 2008                 1/1/2008 12:00:00 AM    12/31/2008 12:00:00 AM  12
FY 2009                 1/1/2009 12:00:00 AM    12/31/2009 12:00:00 AM  12
FY 2010                 1/1/2010 12:00:00 AM    12/31/2010 12:00:00 AM  12

In meinem Fall, meine Firma hat 12 Perioden pro Jahr entsprechen in etwa Monaten. Im Grunde genommen habe ich versucht, erstellen Sie eine update-Anweisung Quartal des Geschäftsjahres, das folgt dieser Logik:
1. Wenn PeriodCount ist teilbar durch 4, dann die Anzahl der Perioden in einem Quartal ist PeriodCount/4.
2. Wenn PeriodNumber ist im ersten Quartal (in diesem Fall die Perioden 1 bis 3), dann FiscalQuarter =1 und so weiter für die Quartale 2 bis 4.

Das problem ist, dass ich kann nicht gewährleistet werden, dass alle 12 Perioden verwendet, einige Firmen, für die ich Unterstützung verwenden Sie eine andere Zahl wie z.B. 10.

Begann ich die folgende select-Anweisung:

    DECLARE @QuarterSize   INT
    DECLARE @SemesterSize   INT

    SELECT TST.Date, 
CASE WHEN glr.PeriodCount % 4 = 0 THEN    
-- Can Be divided into quarters. Quarter size is PeriodCount/4
set  @quartersize = (GLR.PeriodCount/4)

    CASE     


    END

        ELSE 0
    End
    FROM    m2mdata01.dbo.AllDates TST
         INNER JOIN (
          SELECT fcname FYName
          ,min(fdstart) YearStart
          ,MAX(fdend) YearEnd
          ,MAX(fnnumber) PeriodCount
    FROM M2MData01.dbo.glrule GLR
    GROUP BY fcname ) GLR

         ON TST.DATE >= GLR.YearStart AND TST.DATE <= GLR.YearEnd

Kann ich den Wert einer variable innerhalb einer case-Anweisung wie dieser? Was ist der beste Weg, dies zu erreichen? Bin ich gezwungen, eine cursor-Anweisung und überprüfen Sie jedes Datum in meine dimension gegen die Reichweite in der obigen Tabelle?

Ich würde vorsichtig sein mit der Doppel-Nutzung der GLR in deinem Beispiel. Immer noch denken, auf Ihre Frage im Allgemeinen.
Sie haben eine variable (@QuarterSize) und mehreren Zeilen (auch wenn PeriodCount ist das gleiche in jedem). Wo sind Sie, die beabsichtigen, die Verwendung von @QuarterSize und welche Zeile wollen Sie verwenden, um zu berechnen?

InformationsquelleAutor DavidStein | 2010-08-12

Schreibe einen Kommentar