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?
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, was Sie tun möchten, hier können Sie die variable außerhalb der case-Anweisung im select-Klausel. Wie
Beachten Sie, dass @var-Wert eingestellt werden, der Wert bewertet in der letzten Zeile. Wie bereits gesagt, ich bin nicht sicher, wie Sie Sie beabsichtigen, verwenden Sie @quartersize variable. Wenn der Wert benötigt wird, für jede Zeile dann u shouldn ' T be using variable überhaupt.
InformationsquelleAutor VinayC
Es ist vielleicht nicht die eleganteste Lösung, aber hier ist was ich landete mit.
Ich verknüpft mit einer Kopie des Skripts details, um eine gruppierte version von der gleichen Sache.
Dies ist kein big deal, denn die Tabelle hat nur 12 Zeilen für jedes Jahr, in diesem Fall nur insgesamt 132 Zeilen.
Produziert jede Periode die Anzahl der Perioden in jedem Geschäftsjahr und, ob es teilbar durch 4 und 2. Es verwendet dann die "Quarterific" Wert, um zu bestimmen, ob dies in der update-Anweisung, und ich kann durch die wtihout Verwendung von Variablen.
Kann es nicht der beste Weg, aber es funktioniert und ist leistungsfähig ist angesichts der kleinen Datenmenge.
InformationsquelleAutor DavidStein