我有一张表,其中有列 第1周,第2周,第3周等。
我有一个存储过程,根据数字输入,我想选择该列。
例如,如果输入为4,那么我想进行查询,
select *
from table_name
where Week4=<something>
除了使用动态查询之外,有没有办法做到这一点?因为这个动态的东西只是一个巨大的查询的一小部分。
答案 0 :(得分:0)
关于规范化的评论是正确的,但如果你别无选择,你可以使用&#34;或&#34;子句:
declare @inputvalue int;
set @int = 1;
select *
from <table>
where (week1 = <something> and @inputvalue = 1)
or (week2 = <something> and @inputvalue = 2)
or (week3 = <something> and @inputvalue = 3)
or (week4 = <something> and @inputvalue = 4)
如果表格是任何大小的话,这将非常慢,因为您不会使用任何索引。除非您完全无法更改表格结构,否则我不建议这样做。
答案 1 :(得分:0)
我意识到这不是你所要求的,但我想我会指出一些人通过这样做作为动态查询来发现你的意思。
您只需编写一个程序并在其中保留字段名称。假设命名标准相同,那么输入值将是周#(1,2,7,27,123等),字段名称将直接对应(第1周,第2周,第7周,第27周,第123周,等)
create or replace procedure myweek(week_in varchar2)
is
dyn_sql varchar2(1000);
begin
dyn_sql := 'select * from table_name where week'||week_in||' = ''something;'' '
execute immediate dyn_sql;
end;
/
然后打电话给你,你就是这样做:
exec myweek(27); and it would generate the sql:
select * from table_name where week27 = 'something';