SQL Order By innerhalb der Überklausel, die mit der CLR -Aggregation nicht kompatibel ist?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 SQL Order By innerhalb der Überklausel, die mit der CLR -Aggregation nicht kompatibel ist?

Post by Anonymous »

Präambel < /strong>
Ich habe ein Konzept untersucht, und was ich unten poste, ist eine abgeschnittene Version dessen, was ich versucht habe. Wenn Sie es sich ansehen und denken, "das macht keinen Sinn, es so zu tun", dann ist dies wahrscheinlich, weil ich keinen Sinn ergeben kann - es gibt möglicherweise effizientere Möglichkeiten, dies zu tun. Ich wollte das nur ausprobieren, weil es interessant aussieht. Ich verwende die Daten: < /p>

Code: Select all

K | Amt | Instruction | Order
--+-----+-------------+------
A | 100 |        Push |     1
A |   1 |    Multiply |     2
A |  10 |        Push |     3
A |   2 |    Multiply |     4
A |     |         Add |     5
A |   1 |        Push |     6
A |   3 |    Multiply |     7
A |     |         Add |     8
< /code>

Das Ergebnis der Berechnung sollte 123 (= (100 * 1) + (10 * 2) + (1 * 3)) < /code> betragen. < /p>

Verwenden Sie die folgenden SQL (und die CLR-Funktionen ReversePolishaggregate < /code> und ToreversePolishargumente < /code>*, die ich geschrieben habe) Ich kann das richtige Ergebnis: < /p>

SELECT K
, dbo.ReversePolishAggregate(dbo.ToReversePolishArguments(Instruction, Amt))
FROM dbo.ReversePolishCalculation
GROUP BY K;
< /code>

 Das [url=viewtopic.php?t=20324]Problem[/url] < /strong>
Ich möchte die Lösung mehr verallgemeinern, indem ich die Anweisungen und die Bestellung in eine separate Tabelle einfügen, damit ich Berechnungen für beliebige Daten erstellen kann. Zum Beispiel dachte ich an eine Tabelle wie folgt: < /p>

Item |     Type | Amount
-----+----------+-------
A | Budgeted |     10
A |   Actual |     12
B |   Actual |     20
B | Budgeted |     18
< /code>

und verbinden Sie sie zu einer Berechnungstabelle wie dieser < /p>

    Type | Instruction | Order
---------+-------------+------
Budgeted |        Push |     1
Actual |       Minus |     2
< /code>

Berechnen Sie, ob jeder Artikel vorbei oder unter dem Budget ist. Die wichtige Überlegung ist, dass minus nicht überkommend ist, daher muss ich die Reihenfolge angeben, um sicherzustellen, dass der tatsächliche Betrag vom budgetierten Betrag und nicht umgekehrt abgezogen wird. Ich hatte erwartet, dass ich dies mit der Bestellung nach 
in der Über -Klausel der Aggregation tun könnte (und dann ein wenig mehr dieses Ergebnis).SELECT K
, dbo.[ReversePolishAggregate](
dbo.[ToReversePolishArguments](Instruction, Amt))
OVER (PARTITION BY K ORDER by [Order])
FROM dbo.ReversePolishCalculation;
< /code>

Ich erhalte jedoch den Fehler: < /p>


Falsche Syntax in der Nähe des Keywords 'Order'. class = "Lang-SQL PrettyPrint-Override">SELECT K
, SUM(Amt) OVER (PARTITION BY K ORDER BY [Order])
FROM dbo.ReversePolishCalculation;
< /code>

Dies funktioniert einwandfrei (es analysiert und läuft, obwohl ich nicht sicher bin, dass das Ergebnis aussagekräftig ist). Gibt es eine Dokumentation, die ausdrücklich sagt, dass dies nicht unterstützt wird? Habe ich die Syntax richtig? Post sieht so aus, als würde er nicht unterstützt, aber ich hatte auf etwas Offizielleres gehofft.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post