嵌套查询,最好的方法。示例附加

时间:2011-06-27 03:07:20

标签: sql sql-server nested-queries

Righto。所以我有以下SQL Server查询:

SELECT        St.Financial_Account_ID, St.Business_ID, St.Financial_Account_Desc, St.Financial_Account_Type_ID, St.Financial_Account_Active, 
                     St.Financial_Account_OpeningBalance, St.CRTotal, St.DRTotal, CASE st.Financial_Account_Type_ID WHEN 1 THEN (DRTotal - CRTotal) 
                     WHEN 2 THEN (CRTotal - DRTotal) WHEN 3 THEN (CRTotal - DRTotal) WHEN 4 THEN (DRTotal - CRTotal) END AS Balance, 
                     Financial_Account_Type.Financial_Account_Type_Desc
FROM            (SELECT        Financial_Account_ID, Business_ID, Financial_Account_Desc, Financial_Account_Type_ID, Financial_Account_Active, 
                                                Financial_Account_OpeningBalance,
                                                    (SELECT        ISNULL(SUM(Financial_Transaction_Amount), 0) AS Expr1
                                                      FROM            Financial_Transaction AS Financial_Transaction_1
                                                      WHERE        (Financial_Transaction_CR_AccountID = FA.Financial_Account_ID) AND (Financial_Transaction_Date <= @ToDate)) AS CRTotal,
                                                    (SELECT        ISNULL(SUM(Financial_Transaction_Amount), 0) AS Expr1
                                                      FROM            Financial_Transaction AS Financial_Transaction_2
                                                      WHERE        (Financial_Transaction_DR_AccountID = FA.Financial_Account_ID) AND (Financial_Transaction_Date <= @ToDate)) AS DRTotal
                      FROM            Financial_Account AS FA) AS St INNER JOIN
                     Financial_Account_Type ON St.Financial_Account_Type_ID = Financial_Account_Type.Financial_Account_Type_ID
WHERE        (St.Financial_Account_Type_ID = 1 OR
                     St.Financial_Account_Type_ID = 2) AND (St.Business_ID = @BusinessID) AND (CASE st.Financial_Account_Type_ID WHEN 1 THEN (DRTotal - CRTotal) 
                     WHEN 2 THEN (CRTotal - DRTotal) WHEN 3 THEN (CRTotal - DRTotal) WHEN 4 THEN (DRTotal - CRTotal) END <> 0)

这会获得我的资产负债表,并在telerik报告中使用,因此变量等。

我现在需要创建一个“比较资产负债表”,对此没什么太复杂,但要做到这一点,我需要使用不同的日期生成上述报告两次,并使百分比更改列。

我可以看到如何做到这一切,但是当我完成时它会变得非常混乱并且调试一些东西将是一件苦差事,更多的是这将是一个非常简单的例子一旦说完了并做了。它只会从这里变得更加复杂。

我要找的是:

一个querybuilder类型的东西,它将简化我正在生成的子表的调试,或者是否有更多程序性的方法来编写这些东西...例如

查询 走 询问 转到

这种事情有用吗?以及如何将所有内容链接在一起?没有发现任何文章,但是一切似乎只是介绍了基本的选择陈述。

乐意做自己的阅读,只需要朝着正确的方向努力。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

查看公用表格表达式。他们应该使代码更易于维护,并可能提高性能。

http://msdn.microsoft.com/en-us/library/ms190766.aspx