SQL 中的多条记录

Multiple records in SQL

更新 首先我用过滤器 id

尝试这个 sp
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))

然后这显示多个结果

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

在使用 ROW_NUMBER() 时使用 distinct 毫无意义,因为它会为每一行生成不同的值并使 '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

要修复转换错误,您可以试试这个
(假设 login.fid 是一个 varchar 字段而 veh 不是一个 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'

编辑:好的,如果 login.fid 是 varhcar 而 vhe,fid 是 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 中有任何值不能转换为 int

,这将出错

编辑: 您可以尝试像这样修复它,但不能保证它会一直有效。

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'