基于查找表的SQL Server内连接

时间:2015-09-27 05:52:21

标签: sql-server join

我有以下表结构:

create table table1( ID int,
                    assettype varchar(50));

create table t1( poolId int,
                 day_rate float);

create table t2( poolId int,
                 day_rate float);

create table lookuptable( tablename varchar(50),
                           assettype varchar(50));

insert into table1 values (1,'abs'), (2,'card');

insert into t1 values ( 1,5), ( 2,10);

insert into t2 values ( 1,15), ( 2,20);

insert into lookuptable values ('t1','abs'), ('t2','card');

SqlFiddle

对于基于table1中assetType字段的给定id,我需要在查找表中执行查找,以便显示id的资产类型是否为abs

poolId day_rate
1       5
2       10

否则,如果id的资产类型是卡

poolId day_rate
1        15
2        20

我有t1和t2表的原因是因为他们有自己的计算集并且基于id的资产类型我想使用t1和t2

您是否可以引导我进行一些查询或步骤以朝着正确的方向前进

我可以想到结构的情况,但在我的情况下,我在查找表中有100个条目,这意味着结构写入100次的情况。有没有更好的方法来处理这个?

3 个答案:

答案 0 :(得分:0)

试试这个..

declare @table varchar(20)
select @table=tablename from lookuptable where assettype = 'card'
print @table

declare @query nvarchar(1000)
set @query = N'select * from [' + @table +']';
print @query

EXECUTE sp_executesql @query

更改第一个查询中的assettype ..

答案 1 :(得分:0)

您是否只是尝试获取table1中的所有行,然后根据它们的资产类型获取day_rates?你不能做这样的事。

select
,table1.ID
,table1.assettype, 
,(case when table1.assettype = 'abs' then t1.day_rate else t2.day_rate end) as
day_rate
from table1

inner join t1 on table1.id = t1.poolId
inner join t2 on table1.id = t2.poolId

group by table1.ID, table1.assettype

答案 2 :(得分:0)

让我先了解一下这个观点。

首先,您创建此table1为?好吧,但这对我来说似乎也是一张查询表。

create table table1(
   ID int,
   assettype varchar(50)
);

接下来,这个也是一个查找表,因为这个是你的计算参考。

create table t1(
  poolId int,
  day_rate float
);

create table t2(
  poolId int,
  day_rate float
);

最后,您的直接查找表是否取决于assettype定义您将获得该费率的表。

create table lookuptable(
    tablename varchar(50),
    assettype varchar(50)
);

所以,我会尝试简化这个。

一个是你的table1,附加一列

create table table1(
   ID int,
   assettype varchar(50),
   day_rate float
);

    insert into table1 values 
 (1,'abs',5)
,(2,'card',10)

我没有其他理由将表拆分为One-To-Many表关系,因为我没有看到查找表为" child"以及t1和t2。您可以根据需要直接更改table1费率。

请提出一些意见,以便我们可以到达同一页面。感谢