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'
更新 首先我用过滤器 id
尝试这个 spselect 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'