2016-10-17 6 views
-3

Ich Anfänger in Microsoft Visual Studio 2008. Ich habe eine SQL-Abfrage, die eine Zeit zeigt, die auf die Lösung jeder Anfrage von jedem Mitarbeiter ausgegeben wurde. Datenbank ist Microsoft SQL Server unter Windows Server 2008Fehler in SQL-Abfrage Falsche Syntax in der Nähe von

Ich möchte eine Reihe von Anfragen zu finden, die in einer 6 Stunden und unten in Prozent und auch die Summe aller gelösten Anfragen eines jeden Mitarbeiters

gelöst hatten

unter und über 6 Stunden.

Dies ist meine SQL-Abfrage, aber während sie es zu einem Fehler funktioniert:

Incorrect syntax near '>' Incorrect syntax near 'tmp_table.'

SQL Query:

SELECT id, fio, date_s, tline 
     , (cast (tline as int) > 6) as 'tv' 
     , count (distinct id) as 'cid' 
FROM(SELECT id, fio, date_s 
    , dbo.get_work_time(date_s, date_f, '12345', '09:00', '18:00', '0')/60 AS 'tline' 
    FROM Zno_speed WHERE (date_f > @date) 
    GROUP BY fio 
) tmp_table 
GROUP BY id, fio, date_s, tline, (cast (tline as int) > 6) 
+2

'aber während sie es erzeugt eine error' funktioniert - Wie genau funktioniert das, wenn es zu einem Fehler ...? – Siyual

+0

Fügen Sie einfach das Schlüsselwort 'AS' vor tmp_table hinzu. dh wie tmp_table –

+0

ANSI SQL hat doppelte Anführungszeichen für begrenzte Identifiers, z. '" tline "' unterstützt SQL Server auch eckige Klammern, z. '[tline]'. – jarlh

Antwort

1

SQL Server keinen echten boolean-Datentyp haben und somit nicht unterstützt boolesche Ausdrücke wie cast (tline as int) > 6

Sie müssen, dass in einem Fall Anweisung neu zu schreiben:

case when cast (tline as int) > 6 then 1 else 0 end as tv 
1

Verwenden CASE WHEN für (cast (tline as int) > 6)

CASE 
    WHEN (cast (tline as int) > 6) THEN 'Your Text' 
    ELSE 'Your Text' END 
Verwandte Themen