2016-08-30 4 views
0

UPDATE первый я попробовать этот зр с фильтром IDнесколько записей в SQL

select Row_number() 
OVER(ORDER BY (SELECT 1)) AS 'RowNumber', 
vf.* 
from login ld, 
veh vf where 
(ld.fid=vf.fid) 
and ld.id = '0257' 
and ld.id <> 'NA' 
and vf.CustID <> 'None' 
and vf.Simo <> 'None' 
Order by Row_number() OVER(ORDER BY (SELECT 1)) 

и это шоу результат, как этот

RowNumber FID  Oid  CustID  DID  Simo RNo 
1   166 MT255 M2522  1368  LM00 LE270 

теперь, когда я удалить фильтр ld.id и попробовать этот

select Row_number() OVER(ORDER BY (SELECT 1)) AS 'RowNumber', 
vf.* 
from login ld, 
veh vf where 
(ld.fid = cast(vf.fid as varchar(max))) 
and ld.id <> 'NA' 
and vf.CustID <> 'None' 
and vf.SimNo <> 'None' 
Order by Row_number() OVER(ORDER BY (SELECT 1)) 

then this show mutlple result

RowNumber FID  Oid  CustID  DID  Simo RNo 
1   166 MT255 M2522  1368  LM00 LE270 
2   166 MT255 M2522  1368  LM00 LE270 
3   166 MT255 M2522  1368  LM00 LE270 

и когда я удалить этот

(ld.fid = cast(vf.fid as varchar(max))) 

и записать это

(ld.fid=vf.fid) 

, то это шоу ошибка Конверсия удалось при преобразовании не значение VARCHAR 'None' для типа данных Int.

обновление

когда я select * from Login where iD='0257' затем

ID FID 
0257 166 

и когда я пытаюсь select * from Login where FID='166' затем

ID   FID 
0257  166 
022   166 
0258  166 

и select * from Vehicle where FID='166'

FID  Oid  CustID  DID  Simo RNo 
166 MT255 M2522  1368  LM00 LE270 
+0

Почему у вас в поле есть разные типы? – Jamiec

+2

Ваш рябь делает отчетливым бесполезным.Distinct не будет содержать дубликатов записей, но ваш rownumber делает, что у вас нет дубликатов записей – GuidoG

+0

, но когда я проверяю, что в таблице есть только запись в таблице @GuidoG – user6628729

ответ

1

исправить ошибки преобразования вы можете попробовать это
(Предполагая login.fid это поле VARCHAR и Вег не поле VARCHAR)

SELECT distinct 
     vf.RegNo 
FROM login ld 
    inner join veh vf on ld.fid = convert(varchar, isnull(vf.fid,'')) 
where ld.id <> 'NA' 
AND vf.CustID <> 'None' 
AND vf.Simo <> 'None' 

EDIT: хорошо, что если Войти. fid является varhcar и vhe, fid is int тогда как конвертировать login.fid в int?

SELECT distinct 
     vf.RegNo 
FROM login ld 
    inner join veh vf on convert(int, isnull(ld.fid, 0)) = vf.fid 
where ld.id <> 'NA' 
AND vf.CustID <> 'None' 
AND vf.Simo <> 'None' 

Это ошибетесь, если есть какое-либо значение в login.fid, не конвертируемая в целое

EDIT: вы можете попытаться исправить, как это, но нет guarantie будет всегда работаю.

SELECT distinct 
     vf.RegNo 
FROM login ld 
    inner join veh vf on case when isnumeric(ld.fid) = 1 then convert(int, isnull(ld.fid, 0)) else -1 end = vf.fid 
where ld.id <> 'NA' 
AND vf.CustID <> 'None' 
AND vf.Simo <> 'None' 
+0

это показание mutiple records .. когда я попробую ваш запрос – user6628729

+0

, этот ответ намерен исправить ошибку преобразования. Мне уже непонятно, какой ваш вопрос вы измените, если от ошибки конверсии до нескольких записей и обратно. – GuidoG

+0

ОК, что если login.fid является varhcar и vhe, fid is int, то как конвертировать login.fid в int? – user6628729

0

Нет смысла использовать различные при использовании ROW_NUMBER(), поскольку он будет генерировать другое значение для каждой строки и сделать комбинацию «RowNumber» и «RegNo» уникальной. Вместо этого используйте нижеприведенный запрос, чтобы получить требуемые результаты.

Select Row_number() OVER (ORDER BY (SELECT 1)) AS 'RowNumber',* 
    from 
    (

    SELECT distinct 
     vf.RegNo 
    FROM login ld 
     ,veh vf 
    WHERE (ld.fid = cast(vf.fid as varchar(max))) 
     AND ld.id <> 'NA' 
     AND vf.CustID <> 'None' 
     AND vf.Simo <> 'None' 

) tab 
ORDER BY RowNumber, 
vf.RegNo 
+0

Я бы использовал синтаксис левого/внутреннего соединения вместо этого устаревшего синтаксиса соединения – GuidoG

+0

эта ошибка отображения Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и общей таблице выражения, если также не указаны TOP, OFFSET или FOR XML. – user6628729

+0

перемещен по внешнему подзапросу. Это решит ошибку –