Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

AS Syntax - MSSQL

Frage Entwicklung Datenbanken

Mitglied: ottscho

ottscho (Level 2) - Jetzt verbinden

11.06.2010 um 11:47 Uhr, 4359 Aufrufe, 11 Kommentare

Hallo,

ich versuche ein SQL Befehl an die DB zu schicken.
SELECT [AccountId], ( 6371 * acos( cos( radians(37) ) * cos( radians( [New_latitude] ) ) * cos( radians( [New_longitude] ) - radians(-122) ) + sin( radians(37) ) * sin( radians( [New_latitude] ) ) ) ) AS distance FROM [tw_elektric_MSCRM].[dbo].[Account] HAVING distance < 25 ORDER BY distance

Leider kommt due Meldung, dass das Feld distance nicht vorhanden ist.
Ich lege dies ja auch nur virtuell mit AS an.

Was mache ich falsch?

Danke

Gruß
ottscho
Mitglied: AndreasHoster
11.06.2010 um 12:12 Uhr
Soweit ich weiß gehts mit dem Anzeigenamen nicht, aber man kann auch die Spalte angeben, nach der Sortiert werden soll (bei Dir die 2. Spalte):
01.
SELECT [AccountId], ( 6371 * acos( cos( radians(37) ) * cos( radians( [New_latitude] ) ) * cos( radians( [New_longitude] ) - radians(-122) ) + sin( radians(37) ) * sin( radians( [New_latitude] ) ) ) ) AS distance FROM [tw_elektric_MSCRM].[dbo].[Account] HAVING distance < 25 ORDER BY 2
Bitte warten ..
Mitglied: ottscho
11.06.2010 um 12:18 Uhr
geht leider nicht:

[code]
SELECT [AccountId], ( 6371 * acos( cos( radians(37) ) * cos( radians( [New_latitude] ) ) * cos( radians( [New_longitude] ) - radians(-122) ) + sin( radians(37) ) * sin( radians( [New_latitude] ) ) ) ) AS distance FROM [tw_elektric_MSCRM].[dbo].[Account] HAVING 2 < 25 ORDER BY 2
[/code]

Fehler:
Die 'tw_elektric_MSCRM.dbo.Account.AccountId'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Bitte warten ..
Mitglied: ottscho
11.06.2010 um 13:24 Uhr
Ich habe noch dies gefunden:

•Einem Ausdruck select_expr lässt sich mit AS alias_name ein Alias zuweisen. Der Alias wird als Spaltenname des Ausdrucks benutzt und kann in GROUP BY-, ORDER BY- oder HAVING-Klauseln verwendet werden. Zum Beispiel:
SELECT CONCAT(last_name,', ',first_name) AS full_name
FROM mytable ORDER BY full_name;
Das Schlüsselwort AS ist beim Zuweisen eines Alias zu select_expr optional. Das obige Beispiel hätte auch wie folgt geschrieben sein können:
SELECT CONCAT(last_name,', ',first_name) full_name
FROM mytable ORDER BY full_name;
Allerdings kann, weil AS optional ist, ein kleines Problem auftreten, wenn Sie das Komma zwischen zwei select_expr-Ausdrücken vergessen: MySQL interpretiert den zweiten Ausdruck als Aliasnamen. Sie wird etwa in der folgenden Anweisung columnb als Aliasname behandelt:
SELECT columna columnb FROM mytable;
Aus diesem Grund hat es sich bewährt, AS beim Festlegen von Spaltenaliasen immer explizit anzugeben.


Also sollte es eig. ja funktionieren
Bitte warten ..
Mitglied: db-wizard
11.06.2010 um 13:33 Uhr
Zitat von ottscho:
Also sollte es eig. ja funktionieren


--> HAVING distance < 25 ORDER BY distance

Warum benutzt du HAVING, wenn du keine GROUP BY CLAUSE verwendest ? Versuche es mal mit einer "normalen" WHERE CLAUSE, HAVIN OHne ein GROUP BY wirft dir einen Fehler

--> WHERE distance < 25 ORDER BY distance
Bitte warten ..
Mitglied: AndreasHoster
11.06.2010 um 13:36 Uhr
OK, ich habe gar nicht gesehen, daß distance auch in dem HAVING Vergleich drin ist.
So gehts nur beim Order By.
Für den Having Eintrag muss ich nochmals nachdenken.
Bitte warten ..
Mitglied: db-wizard
11.06.2010 um 13:42 Uhr
Zitat von AndreasHoster:
Für den Having Eintrag muss ich nochmals nachdenken.


Na ja...HAVING ist hier einfach ...falsch ...Hast du es mal mit einem WHERE probiert ?.. BTW, welche DB hast du eigentlich ? Im Titel steht MSSQL, aber du zitierst aus dem MYSQL Handbuch ?

Gruss
Bitte warten ..
Mitglied: ottscho
11.06.2010 um 13:50 Uhr
sooo, ich habe versucht dies in ASP umzusetzen:

http://code.google.com/intl/de-DE/apis/maps/articles/phpsqlsearch.html

Das habe ich übernomme, daher kommt auch der SQL Befehl.

Ich habe es nun so:
SELECT [name], ( 6371 * acos( cos( radians(48.06223) ) * cos( radians( [New_latitude] ) ) * cos( radians( [New_longitude] ) - radians(8.52301) ) + sin( radians(48.06223) ) * sin( radians( [New_latitude] ) ) ) ) AS distance FROM [tw_elektric_MSCRM].[dbo].[Account] WHERE 2 < 25 ORDER BY 2


Hier erhalte ich nun ein Ergebnis.
Leider stimmt das Ergebnis nicht!
Oder ich habe einen denkfehler. Es sollte nur alle angezeigt werden, welche bei Distanz unter 25 haben.
Leider werden aber alle Datensätze angezeigt. Das liegt bestimmt an der Formatierung...

Siehe Screenshot:

http://www.myimg.de/?img=bild5e184.jpg
Bitte warten ..
Mitglied: db-wizard
11.06.2010 um 14:04 Uhr
Hallo,

Ich kenne MSSQL gar nicht, aber in Oracle kannst du keinen ALIAS im WHERE verwenden in deinem Fall. Du musst als im WHERE die Berechnung nochmals aufführen. Der Grund ist, das das Filtern über die WHERE Clause vor der Berechnung des SELECT Statements erfolgt.

01.
SELECT [name], ( 6371 * acos( cos( radians(48.06223) ) * cos( radians( [New_latitude] ) ) * cos( radians( [New_longitude] ) - radians(8.52301) ) + sin( radians(48.06223) ) * sin( radians( [New_latitude] ) ) ) ) AS distance  
02.
FROM [tw_elektric_MSCRM].[dbo].[Account]  
03.
WHERE ( 6371 * acos( cos( radians(48.06223) ) * cos( radians( [New_latitude] ) ) * cos( radians( [New_longitude] ) - radians(8.52301) ) + sin( radians(48.06223) ) * sin( radians( [New_latitude] ) ) ) )  < 25  
04.
ORDER BY 2
Gruss
Bitte warten ..
Mitglied: AndreasHoster
11.06.2010 um 14:28 Uhr
Man sollte immer alles durchlesen

Having ohne group By geht tatsächlich nicht und where 2 < 25 ist natürlich nicht richtig, weil immer wahr.
Und man kann nur bei order by die Spaltennummer angeben.

So wie es db-wizard gemacht hat, sollte es tun.
Laut MSSQL Handbuch sollte aber auch Deine Variante mit dem Aliasnamen tun.
Bitte warten ..
Mitglied: ottscho
11.06.2010 um 14:34 Uhr
die Variante mit den ALIAS Namen geht leider nicht.
Aber die von db-wizard funktioniert

Vielen Dank
Bitte warten ..
Mitglied: Biber
11.06.2010 um 17:24 Uhr
Moin alle,

die Varianten mit ALIAS und der unkonventionellen Interpretation (oder Implementierung) der HAVING-Clause funktionieren in der Tat nur unter mySQL.

Und das steht auch dort ein bisschen versteckt im Handbuch, so als wären doe Entwickler sich nicht ganz sicher, ob sie da nun stolz drauf sein dürften.

[Zitat]
... 
{zum Thema AS - Aliase in GROUP BY/Having verwenden} 
Einem Ausdruck select_expr lässt sich mit AS alias_name ein Alias zuweisen. Der Alias wird als Spaltenname des Ausdrucks benutzt und kann in GROUP BY-, ORDER BY- oder HAVING-Klauseln verwendet werden 
.... 
... 
{zum Thema HAVING auf NICHT-GROUP-BY-Spalten] 
... 
Die HAVING-Klausel wird fast als Letztes angewandt – unmittelbar bevor die Elemente an den Client gesendet werden, und ohne Optimierung. (Nur LIMIT wird noch nach HAVING angewandt.) 
 
Der SQL-Standard sieht vor, dass HAVING nur Spalten in der GROUP BY-Klausel oder solche Spalten referenzieren darf, die in Zusammenfassungsfunktionen verwendet werden. Allerdings unterstützt MySQL eine Erweiterung dieses Verhaltens und gestattet HAVING ferner die Referenzierung von Spalten in der SELECT-Liste und Spalten in äußeren Unterabfragen.  
...
[/Zitat]
Quelle: Ein willkürlich herausgegriffenes mySQL-Manual

--> Das ist je nach Sichtweise
a) ein nützliches Feature
b) absolut indiskutabel, weil strunzinkompatibel, sollte jemals das darunterliegende Datenbankblech geändert/getauscht werden.
Und es verstehen ncht mal SQL-Kundige, warum es funktioniert haben könnte.

Meine Sichtweise tendiert eindeutig zu b).. BTW haben wir uns ja gerade wegen dieser Inkompatibilität hier im Thread getroffen.

A propos Inkompatibilitäten:

könntet ihr bei Gelegenheit (in der Halbzeitpause oder so) bitte noch ein bisschen nach-editieren auf Quellcode, Code oder HTML Snippets ?
Und evt. auch ein paar gezielte Zeilenumbrüche reinhacken in das Statement, das sonst nur ein 32-Bit-Parser zu lesen gewillt wäre?
Oder ein Biber nach 32 Bit?

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Server
MSSQL 2012 User erstellen mit gewissen Berechtigungen (1)

Frage von rabo001 zum Thema Windows Server ...

Windows Server
gelöst WMI-Filter Syntax (10)

Frage von DasWombat1993 zum Thema Windows Server ...

Datenbanken
gelöst MsSQL 2005 zu MsSQL 2014 Servernamen ändern? (21)

Frage von SPSman zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...