2017-06-21 71 views
0

早上好SQL专业人员,带有计算字段的动态SQL

这是关于使用MS SQL 2012动态创建复杂的SQL查询。为了更好的理解,抽象/简化了任务描述。 下面的例子将解决这个问题,但不工作:

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

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

由于提前,henuit

+0

请参阅下面XXXXX – henuit

回答

0

随着子查询:

SELECT 
    t.Result01, 
    Right(t.Result01, 5) AS Result02 
FROM 
(
    SELECT 
     Left(Kunden, 10) AS Result01, 
    FROM tbl_Kunden 
) as t 
+0

亲爱的背影, 感谢您的超快速响应。这对于简化的例子来说效果最好。实际上,我有8-12个函数(包括UDF),部分也在查询的WHERE部分发生,还有AND/OR。 所以我担心你的解决方案不会使它更容易/更简单。如果你有一个想法会很好。祝你好运 – henuit

+0

@henuitm好吧,也许如果你整个查询,我可以帮你降低复杂性 – Backs

+0

不幸的是,我没有一个查询。其任务是从元模型读取查询的信息并从中构建SQL查询。在元模型中,用户可以使用图形界面构建查询 - 无需SQL知识。 不过谢谢 – henuit

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 

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

+0

亲爱的SFrejofsky, 当你写,我目前正在工作。然而,这很难控制,我希望计算的字段更容易。 例如,在where条件中:... result01> = result02 .. – henuit