Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据变量/查询结果选择列的优雅方法?

根据变量/查询结果选择列的优雅方法?
EN

Stack Overflow用户
提问于 2013-04-16 07:46:40
回答 2查看 6.5K关注 0票数 3

我有一个标量函数,它返回列名的VARCHAR

我想使用此结果作为select查询的基础,因此:

代码语言:javascript
运行
AI代码解释
复制
SELECT dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) AS myCol
FROM tbl_ThisTable WHERE ...

目前,这正确地列出了每个值的UDF的实际输出(列名)。

我希望select语句返回函数返回的列的值,因此:

代码语言:javascript
运行
AI代码解释
复制
SET @sql = 'SELECT ' + dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) + ' AS myCol
FROM tbl_ThisTable WHERE ... '

并运行EXEC sp_executesql

有比动态SQL路由更好的方法吗?SQL可以以某种方式查询该列作为来自UDF的输出吗?

编辑以添加

这是业务需要管理选择输出的规则的地方,因此它们需要在可更新的表中。如果将它们硬编码到表值函数的SELECT中,那么控制它们的不再是业务。

因此,是的,这个查询是非常可定制的,但是在这个例子中是“一件好事”。

此外,有一个有限的参数进入udf_GetColName。它接收一个源列名,一个源列值,它在rules表中进行查找。如果规则发现该列与该值匹配,则选择并返回一个output column,否则将使用默认的output column。这是需要选择的列,因此可能与输入或输入值有很大不同。

如前所述,我很高兴听到任何其他的想法,当然,如果这是愚蠢的,应该选择另一条路线!

最后编辑我回家前一天,

我正在寻找一种方法,根据tbl_ThisTable中的其他列值,从tbl_ThisTable中选择要使用的列。

关于使用哪一列需要在表中易于更新的规则--主要限制是数据库的接口/前端--我们只能返回直数据集,因此不能使用前端来做出这个决定/连接多个数据集等等。

如果有一种很好的方法来部署这些规则,这些规则可以在数据库中更新而不需要重写代码,我很想听听它们。我现在只是在测试这个,所以设计是灵活的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 08:04:48

倒带,

而不是

代码语言:javascript
运行
AI代码解释
复制
SET @sql = 
    'SELECT ' + dbo.udf_GetColName('Val1', ColumnFromThisTable, etc) +
        ' AS myCol FROM tbl_ThisTable WHERE ... '

为什么不直接做

代码语言:javascript
运行
AI代码解释
复制
SELECT Val1 [myCol] FROM tbl_ThisTable WHERE ...

一开始?

让调用者进行分支。

我的意思是,使用您选择的ORM在客户机中生成SQL。

编辑

使用sp_executesql和读取索马斯科格

更广泛地说,我相信您的数据可以标准化,这样您就可以通过连接条件而不是动态列选择来实现您想要的结果。如果没有实际的模式和示例数据,我就无法很好地可视化答案。

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 07:51:04

我唯一能想到的其他方法是使用case语句:

代码语言:javascript
运行
AI代码解释
复制
select (case when udf_GetColName('Val1', . . .) = 'Col1' then Col1
             when udf_GetColName('Val1', . . .) = 'Col2' then Col2
             . . .
       ) as MyCol
from tbl_ThisTable . . .

动态SQL似乎更简单。但是,在这两种情况下,都要小心类型。对于case,这将返回第一个then的类型。对于动态SQL,返回值的类型取决于基础列的类型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16041423

复制
相关文章
查询结果集合成一列的sqlserver实现方法stuff
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
2.1K0
查询结果集合成一列的sqlserver实现方法stuff
【工具】如何根据变量类型选择数据分析方法?
面对大量数据,你将如何开展数据分析?您会选择什么样的数据分析方法呢?您是否看着数据感到迷茫,无所适从。认真读完这篇文章,或许你将有所收获。 把握两个关键 1、抓住业务问题不放松。您费大力气收集数据的动机是什么?你想解决什么问题?这是核心,是方向,这是业务把握层面。 2、全面理解数据。哪些变量,什么类型?适合或者可以用什么统计方法,这是数据分析技术层面。须把握三大关键:变量、数据分析方法、变量和方法的关联。 认识变量 认识数据分析方法 选择合适的数据分析方法是非常重要的。选择数据分析(统计分析)方法时
小莹莹
2018/04/19
1.2K0
【工具】如何根据变量类型选择数据分析方法?
【说站】Python DataFrame如何根据列值选择行
以上就是Python DataFrame根据列值选择行的方法,希望对大家有所帮助。
很酷的站长
2022/11/24
5.5K0
【说站】Python DataFrame如何根据列值选择行
EasyGBS云端录像查询结果跟实际的查询结果不同调整方法
近期我们一直在对EasyGBS的云端录像做测试,其中一个重要原因就是广大用户对云端录像的要求不断提高,因此对于云端录像的检查仍然是必不可少的一个环节。在测试过程中,我们就发现在云端录像的查询结果跟想要查询的结果不同。
TSINGSEE青犀视频
2021/08/10
1.6K0
EasyGBS云端录像查询结果跟实际的查询结果不同调整方法
Mysql存储过程查询结果赋值到变量
一个参数的方法 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test_tbl; select cnt; 方式 2 set @cnt = (select count(*) from test_tbl); select @cnt; 方式 3 select count(*) into @cnt1 from test_tbl; select @cnt1; 多个列的情况下似乎只能用 into 方式 select max(status),
似水的流年
2019/12/05
8.9K0
sql 未明确定义列_查询块具有不正确的结果列数
ORA-00918: 未明确定义列: 你在做多表查询的时候出现了字段重复的情况,因为你有时候会对字段进行重新命名,表A的A1字段与表B的B1字段同时命名成了C,这时候就会出现未明确定义列,假设A表中有一个字段名叫:A_B_C ,实体类就会有个叫ABC的字段,sql你写成: SELECT * FROM ( SELECT DISTINCT A., B.B1 AS ABC 这样写是没有问题的,但是: SELECT * FROM ( SELECT DISTINCT A., B.B1 AS A_B_C 就有问题了;
全栈程序员站长
2022/11/09
3.1K0
用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
数据库中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
全栈程序员站长
2022/07/09
1.8K0
mysql语句根据一个或多个列对结果集进行分组
接下来我们使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:
用户4988376
2021/07/16
3.7K0
Druid和ES查询结果通用解析方法
做数据的同学相信大家对Druid和Es都不陌生,Druid可以说是一款基于时序的查询引擎,支持数据实时摄入,在数据摄入前指定维度和指标,提供基于时间层面的预聚合,Druid会把一个数据点当做一个实际发生的事实,在数据摄入后就不能修改。常被应用于一些实时的场景,比如对数据实时分时间段分组聚合。ES同样是一款高效的查询引擎,支持数据的批量导入,同样支持数据实时的摄入,也支持数据批量导入,相比于Druid不仅对聚合高度支持,同时兼顾强大的搜索能力,ES主要是基于对摄入数据进行分词,同时构建索引增加查询聚合的速度。通常我一般将ES用作一些离线的场景,对离线场景支持指标的快速查询和聚合。
actionzhang
2022/11/30
9750
Druid和ES查询结果通用解析方法
Ext根据条件显示隐藏列
  写在ExtonReady函数里面,并在表格成功渲染之后,可以添加判断是否隐藏或者显示某一列
河岸飞流
2019/08/09
2.8K0
jquery根据属性选择
有信仰的人不会孤独。——阿列克谢耶维奇 分享一个jquery选择器的小技巧 我们可以通过自定义属性键值选中一个元素 例如如下元素: <div ruben="vampire">阿超</div> 然后我们通过ruben=vampire选中这个div 就可以如下写法: let vampire = $('div[ruben="vampire"]') 我们可以简单测试一下输出里面的内容 <div ruben="vampire">阿超</div> <script type="text/javascript">
阿超
2022/08/17
2K0
jquery根据属性选择
sublime 列选择 原
2016年11月17日 09:27:24 zzh_my 阅读数:20295 标签: sublime text 更多
拓荒者
2019/03/08
2.6K0
根据某列相同元素求和
下面是一个需要计算相同基因的exon的长度的文件,即根据相同的基因,先计算基因的起点到终点的距离,再对相同的基因的的exon距离求和
生信编程日常
2020/06/11
1K0
根据某列相同元素求和
不用临时的变量 优雅、高效的交换两个数方法
到目前为止,我们的答题思路是没错的,就是寻找另外一种数据存储的模式,用一个变量保存两条信息的集合,我们仍然需要采用这种模式解决这个问题,但原先的简单相加的模式是不行了,于是我们想到,集合两个整型数字,是否可以从其二进制表达方面来考虑?
sunsky
2020/08/20
8130
Oracle根据时间查询
以下SQL,只会查询2021-01-01至2021-1-2 00:00:00的数据
鱼找水需要时间
2023/02/16
2.2K0
Oracle根据时间查询
Flask传参到后台,根据参数进行查询,将结果显示到前端
在 index.html 获取 id ,通过 id 在后台进行数据的查询,然后将结果显示到另一个页面 other.html 。
Lokinli
2023/03/09
1.9K0
Flask传参到后台,根据参数进行查询,将结果显示到前端
机器学习中的特征选择(变量筛选)方法简介
变量选择(特征选择,feature selection) ,是机器学习领域非常重要的问题,到底哪些变量是有用的,哪些是不重要的,可以删除的,怎么选才能提高模型表现,理论非常复杂,实在不是一个临床医生能完全掌握的,以下简单介绍下,感兴趣的自己看书,后续会推一些相关R包的使用教程。
医学和生信笔记
2023/02/14
3.6K0
点击加载更多

相似问题

根据多个日期列和排序结果选择的查询

10

根据变量选择列

11

根据列的结果添加列的查询

11

根据其他查询的结果运行选择查询

223

Mysql根据列求和结果选择列

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档