|
|
||||||
|
#1
|
|
|
|
|
Hallo,
ich habe in SQL häufiger folgendes Problem: ich muss das Ergebnis einer Bedingung innerhalb eines Ausdrucks verwenden. Also vom Prinzip her: DECLARE @flag AS BIT SET @flag = GETDATE() > '01.01.2006' -- Geht natürlich nicht! Work-Around: DECLARE @flag AS BIT SET @flag = CASE WHEN GETDATE() > '01.01.2006' THEN 1 ELSE 0 END Der Work-Around Funktioniert zwar, ist aber unglaublich viel Tipperei und ich bin mir auch über die Performance im unklaren, wenn er als Subexpression verwendet wird. Reale Anwendungsfälle: -- Statistische Auswertungen SELECT a,b,c, CAST(SUM(<Zeilen mit Bedingung 1>) AS FLOAT)/COUNT(*) AS 'Anteil 1', CAST(SUM(<Zeilen mit Bedingung 2>) AS FLOAT)/COUNT(*) AS 'Anteil 2', CAST(SUM(<Zeilen mit Bedingung 3>) AS FLOAT)/COUNT(*) AS 'Anteil 3' FROM ... GROUP BY a,b,c -- XOR-Emulation, für Datenbanken, die den logischen XOR-Operator nicht kennen (z.B. MS SQL) SELECT * FROM ... WHERE <Bedingung1> + <Bedingung2> + <Bedingung3> & 1 = 1 -- entspricht <Bedingung1> XOR <Bedingung2> XOR <Bedingung3> -- Gruppierung nach bestimmten Eigenschaften SELECT <Bedingung 1>, <Bedingung 2>, COUNT(*) FROM ... GROUP BY <Bedingung 1>, <Bedingung 2> -- der Fall liefert besonders unübersichtlichen SQL-Code, vor allem, wenn er noch in Kombination mit obiger XOR-Emulation auftritt. Gibt es da andere, besere Möglichkeiten? Marcel |
|
|
|
#2
|
|
|
|
|
Marcel Müller <news.5.maazl> wrote:
>-- XOR-Emulation, für Datenbanken, die den logischen XOR-Operator nicht >kennen (z.B. MS SQL) Meines Wissens gibt es in MS SQL den Operator ^. Wenn du dann die Variablen als boolean statt bit deklarierst, wird es wesentlich übersichtlicher. Grüße, Torsten |
|
#3
|
|
|
|
|
Hallo,
Torsten Schneider schrieb: > Marcel Müller <news.5.maazl> wrote: > >>-- XOR-Emulation, für Datenbanken, die den logischen XOR-Operator nicht >>kennen (z.B. MS SQL) > > Meines Wissens gibt es in MS SQL den Operator ^. Ja, richtig. Aber das macht im gezeigten Fall nur einen marginalen Unterschied, da auch dies ein Integer-Operator ist. WHERE <Bedingung1> ^ <Bedingung2> ^ <Bedingung3> = 1 <Bedingung#> muss nachwievor die Form CASE WHEN <Bedingung#> THEN 1 ELSE 0 END haben. > Wenn du dann die Variablen als boolean statt bit deklarierst, wird es > wesentlich übersichtlicher. Zumindest MSSQL muss da auch passen. Ist glaube ich ein Oracle/MySQL feature. Marcel |
|
|
| Ähnliche Themen | |
| Problem mit Konvertierung zu integer Hallo, wie kann man z.B. einen Wert '16,' in 16 konvertieren? cast(spalte as integer) arbeitet hier leider nicht. Die Spalte in der DB ist vom Typ varchar, es stehen aber... |
|
| Variable (integer) als Bedingung in einer SQL-Anweisung Moin zusammen, ich möchte in eine SQL-Anweisung (Datenbasis für ein Reportaufruf) eine Variable (integer) als Bedingung einbauen. Da mir das nicht gelungen ist, habe ich als... |
|
| Konvertierung von "Integer" zu "String" in einem konstanten Ausdruck Guten Morgen irgendwie kriege ich nicht hin ein ganz normale Konvertierung von Integer zu String in einem konstanten Ausdruck Mein Fall: Private Const intZahl As Integer =... |
|
| Konvertierung in Integer Hallo NG, ich habe gleich noch eine Frage. Sie betrifft die zahlreichen Konvertierungsmöglichkeiten. Welche sollte man wann anwenden? Werden die VB-spezifischen Funktionen... |
|
| Wie invertiert man einen boolschen Wert? Hallo Wie invertiert man einen boolschen Wert? Folgendes geht offenbar nicht irgendwas = !irgendwas; Jetzt sagt mir bitte keiner "If-Konstruktion ..." |
|
|
Alle Zeitangaben in WEZ. Es ist jetzt 06:23 Uhr. | Privacy Policy
|