带有计算字段的动态SQL

时间:2017-06-21 07:25:27

标签: sql-server tsql

早上好SQL专业人员,

它是关于使用MS SQL 2012动态创建复杂SQL查询。为了更好地理解,任务描述被抽象/简化。 以下示例将解决该问题,但不起作用:

Select 
   Left (Kunden ,10) AS Result01,
   Right (Result01,5) AS Result02
from tbl_Kunden

请注意:我想使用" Left"的结果。功能在"右"函数(左和右只是几个其他函数的占位符)。但是,这是由于错误:列名称无效' Result01'。 有没有人知道如何创建一个dyn。 SQL查询,以便我可以在后续函数中使用先前插入的命名字段?

先谢谢,henuit

2 个答案:

答案 0 :(得分:0)

使用子查询:

DataTable dtbs = new DataTable(); 
DataView dvbs = new DataView(dt); 
dvbs.RowFilter = "ColumnName='Filtervalue'"; 
dtbs = dvbs.ToTable();

答案 1 :(得分:0)

假设第一个函数的输出与第二个函数的输入兼容,你可以这样做。

Select 
   Left (Kunden ,10) AS Result01,
   Right (Left (Kunden ,10),5) AS Result02
from tbl_Kunden

本质上,SQL将评估从语句的最内层嵌套到最外层语句的语句,因此嵌套语句应该可以使您获得所需的位置。现在,如果内部最大或任何内部语句的输出与封装功能不兼容,您可能需要合并嵌套的前1选项或转换,但不知道该过程的完整故事是不可能的说出你可能需要做什么。

/ ********************************************编辑***************** ************************************************** ********** / 根据你最近的评论,我建议使用一个声明。这些将在where子句和查询完成后进行评估。用于评估聚合函数。我会对使用这种技术感到困惑,因为它在处理极大数据集时会产生负担,因为它在查询完成后执行。

select foo, count(bar)
from table
where value = value
group by foo
having count(bar) >= number

这将允许您评估所选值而不将其放在子查询中。这可能会或可能不会解决您的所有问题,但在必要时确实可以达到目的。