Ob MS-SQL das auch nicht mag, weiß ich nicht, aber andere DBMS mögen es nicht, wenn man in der WHERE-Klausel mit den Alias-Namen arbeitet. Diese werden erst nach dem Ermitteln des Ergebnisses den Spalten hinzugefügt. Vorher muss man auf den originalen Spaltennamen zugreifen oder den Ausdruck, den man zu aliasen gedenkt, noch einmal hinschreiben.
Mittlerweile sieht der letzte Teil des Querys so aus: "AND History1.Datum11 BETWEEN '$von' and '$bis'") or die (mssql_get_last_message());
Es wird aber keine Fehlermeldung ausgegeben. Ersetzt ich aber das AND durch ein OR läuft der Query wieder aber natürlich mit einem falschen Resultat.
Nichtsdestotrotz: Was steht in $data nach der Abfrage drin? Lass dir das Ergebnis mit var_dump($data) ausgeben und vergleiche es mit der Funktionsbeschreibung im Handbuch.
var_dump gibt mir folgendes aus: resource(4) of type (mssql result) mit welchem Handbuch soll ich das jetzt den vergleichen?