日期:2014-05-17  浏览次数:20444 次

sql 2008: 如何根据某表记录值在某范围表中位置取对应的范围标识
table1: 对应基础标识范围
1, 4.99    --1
5, 9.99    --2
10,19.99   --3
20,49.99   --4
....

table2: 保存值
4.14
5.0
25.11
14.20
...

能否一条语句实现? 希望得到这样的结果(根据table2 中值在table1对应 位置取flag),
4.14  / 1
5.0   / 2
25.11 / 4
14.20 / 3
...

谢谢!

------解决方案--------------------




USE [LY]
GO
/****** 对象:  Table [dbo].[Table1]    脚本日期: 06/20/2013 17:53:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table1](
[id] [int] NULL,
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[flag] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

USE [LY]
GO
/****** 对象:  Table [dbo].[Table2]    脚本日期: 06/20/2013 17:53:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table2](
[columnIda] [int] NULL,
[value1] [decimal](18, 2) NULL
) ON [PRIMARY]

select  (cast(Table2.value1 as nvarchar(10)) + '/'+ a.flag) as col from Table2 left join (
select cast( replace(parseName(replace( replace(name,'.','-'),',','.'),1),'-','.') as decimal(18,2)) as id1,
cast( replace (parseName(replace(replace(name,'.','-'),',','.'),2),'-','.') as decimal(18,0))  as id2,
flag from table1
)a  on 
Table2.value1 >=  a.id2
and Table2.value1 <=  a.id1

--结果
--4.14/1
--5.00/2
--25.11/4
--14.20/3