基于值创建列名,无需执行

时间:2018-07-30 11:21:32

标签: sql sql-server-2012

我需要根据其他列的值创建一个列名。我需要从一列中返回一个值,但是具体名称取决于其他表上插入的值。

根据实例:

表A

Column1 | Column2
1         2

基于这些值,我需要转到表B的“ VE12”列。

我动态地需要它,所以execute(@query)是我的最后一个选择,我希望避免使用CASE WHEN语句,因为我有50多个选择。

我的查询将类似于:

select case when fn.tab=8 and fo.pais=3 then cp.ve83 end 
FROM fn
INNER JOIN fo ON fo.stamp = fn.stamp
INNER JOIN cp

如果列选项卡中的值为8,而pais列中的值为3,则应返回ve83列中的值。

感谢所有帮助!

1 个答案:

答案 0 :(得分:3)

唯一明智的选择是返回数据的业务含义并根据此含义重新设计数据库,而不是根据“ SQL从未打算支持的”面向技术的抽象”。

这样做的主要原因是SQL是基于 FIRST 顺序逻辑建立的,这排除了支持诸如可变域之类的东西。您正在执行(或至少要尝试执行)操作,因为ve12可能是DATETIME,而ve83可能是VARCHAR,而ve56 coulb是BLOB等。因此,您[或其他任何人]都无法确定查询结果的数据类型,由于这种可变域和可变源的特性,将意义附加到所需查询的结果甚至更不可能。