2016-05-04 14 views
1

Ich versuche, mit einer SQL-Anweisung zu kommen, die den Kilometerzähler konvertiert, wenn in km in Meilen gespeichert. Wenn der Kilometerzähler in Meilen gespeichert wird, verlässt er wie er ist. Nach der Konvertierung muss dann nach Suchparametern, d. H. Kilometerstand, gesucht werden.Mathematische Funktion in Sql Case Statement

Die Schritte, die ich unternommen habe, verwendet die Case-Anweisung.

Hier ist mein Ausschnitt aus der Select-Anweisung, die ich derzeit benutze:

DECLARE 
@Mileage NVARCHAR(75) = NULL, 
@IsMiles BIT = 1, 
@Converted NVARCHAR(75) = NULL 
SELECT [Id],Odometer,IsMiles, 
CASE IsMiles when 0 THEN OdometerValue * 0.62137 
else Odometer end 
FROM [dbo].[Vehicle] 
where IsMiles = 0 

Gibt es trotzdem, das Ergebnis der Case-Anweisung zu ConvertedOdometer passieren. Ich möchte diesen Wert verwenden, um die Mileage-Parameter für die Suche zu ermitteln.

So etwas mit dieser Bedingung:

(ConvertedOdometer >=0 AND ConvertedOdometer <= @Mileage) 

Ich bin neu in Case-Anweisung haben, um diese Führungen verwendet:

StackOverflow

Sql School

Some Blog

+0

Sie können nur sagen CASE ... END AS 'ConvertedOdometer' – RichardCL

+0

@RichardCL Dank. Ich habe das AS-Keyword an einem falschen Ort platziert. Das löst das Problem – yuvs

+0

Es ist so einfach zu tun! :-) Werfen Sie einen Blick auf Microsoft SQL Server 2012 T-SQL-Grundlagen von Itzik Gen-Gan> Kapitel 5: Tabellenausdrücke> Abgeleitete Tabellen> Zuweisen von Spaltenaliasen. – RichardCL

Antwort

2

Vielleicht so etwas wie dieses ...

DECLARE 
@Mileage NVARCHAR(75) = NULL, 
@IsMiles BIT = 1, 
@Converted NVARCHAR(75) = NULL 

select a.* from 
(SELECT [Id],Odometer,IsMiles, 
CASE when IsMiles=0 THEN OdometerValue * 0.62137 else Odometer end as ConvertedOdometer 
FROM [dbo].[Vehicle] 
where IsMiles = 0)a 
where a.ConvertedOdometer >=0 AND 
a.ConvertedOdometer <= @Mileage 
+0

Dies oder ein CTE ist, wie ich es tun würde. –