2013-10-25 5 views
1

Я пытаюсь получить одну запись в сазе, где нахожусь я предполагаю поставить seelect заявление топ (1)Пытается получить одну строку в запросе?

CASE WHEN CAST(VehicleCC AS MONEY) BETWEEN -1 AND 50 THEN '33.94' 
          WHEN CAST(VehicleCC AS MONEY) BETWEEN 51 AND 125 THEN '39.65' 
          WHEN CAST(VehicleCC AS MONEY) BETWEEN 126 AND 500 THEN '55.90' 
          WHEN CAST(VehicleCC AS MONEY) BETWEEN 501 AND 650 THEN '67.31' 
          WHEN CAST(VehicleCC AS MONEY) BETWEEN 651 AND 1000 THEN '78.65' 
          WHEN CAST(VehicleCC AS MONEY) > 1001 THEN '79.85' 
          else 
          (SELECT TOP(1) cast (VehicleCC as varchar (50)) FROM HIRE_INSTRUCTION HIRP 
           INNER JOIN VEHICLE VEH ON HIRP.FKFleetVehicleID=VEH.vehicleid 
           WHERE HIRP.FKBLDRefID=cl.FKBLDRefID AND HIRP.Deleted=0 AND VEH.Deleted=0 
           ORDER BY veh.VehicleCC DESC) END AS [Hire Rate Charged Per Day], 
+3

Что вы получаете? – holaSenor

+0

Использование LIMIT 1 посмотреть здесь http://stackoverflow.com/questions/4708708/mysql-order-by-limit –

+1

OP сказал TSQL, который предполагает MS SQL Server. Я не считаю, что 'LIMIT' существует в SQL Server. –

ответ

0

Если TOP (1) не работает, попробуйте RANK():

SELECT VehicleCC 
FROM (
    SELECT CAST(VEH.VehicleCC as varchar (50)), 
     RANK() OVER(ORDER BY CAST(VEH.VehicleCC as varchar (50))) AS CCRank 
    FROM HIRE_INSTRUCTION HIRP 
     INNER JOIN VEHICLE VEH 
      ON HIRP.FKFleetVehicleID=VEH.vehicleid 
    WHERE HIRP.FKBLDRefID=cl.FKBLDRefID 
     AND HIRP.Deleted=0 
     AND VEH.Deleted=0 
    ORDER BY veh.VehicleCC DESC 
    ) CC 
WHERE CCRank = 1 
0

Вы можете использовать set rowcount, чтобы ограничить количество строк, возвращаемых запросом.

set rowcount 1 -- the query will return one record 

select * from table 

set rowcount 0 --back to normal 
Смежные вопросы