Вложенные Запросы, Лучший способ сделать это. Пример прилагается - PullRequest
1 голос
/ 27 июня 2011

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, следовательно, переменные и т. Д.

Теперь мне нужно создать «Сравнительный баланс», в котором нет ничего слишком сложного, но для этого мне нужно дважды сгенерировать приведенный выше отчет с разными датами и сделать столбец с процентными изменениями.

Я вижу, как все это сделать, но к тому времени, когда я закончу, все станет довольно грязно, и отладка чего-то станет рутиной, более того, это будет довольно простой пример, как только все будет сказано и сделано. Отсюда все сложнее.

Я ищу либо:

Тип построителя запросов, который упростит отладку создаваемых мной подстатей или существует более процедурный способ написания таких вещей ... как

Запрос Идти запрос Перейти

Такого рода вещи работают? и как мне связать все вместе? не нашел ни одной статьи, но тогда кажется, что все только вводит базовые операторы выбора.

Рад читать сам, просто нужно нажать в правильном направлении.

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 27 июня 2011

Посмотрите на выражения Common Table.Они должны сделать этот код более понятным и, возможно, повысить производительность.

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

...