我有以下表结构:
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');
对于基于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次的情况。有没有更好的方法来处理这个?
答案 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费率。
请提出一些意见,以便我们可以到达同一页面。感谢