我有一个查询,将一个月的最终余额与同月的最终余额进行比较,但是从前一年算起。 查询工作正常,问题是当我想要检查超过2年之前,我的前任进行了查询但是这个查询花了太多时间来打印结果,它只是每年添加另一个查询我们想看,所以年份越高,查询越大。
另一位前任创建了一个数据透视表来查看结果以显示他的信息,仅显示3年前,查询本身是好的,但是当我们想要显示由于所有连接和联合而导致的整个信息时,查询变为时间效率低下。
该项目最近已传递给我,我看到原始(结构/主干)查询看起来不错,以达到与去年月度最终余额相比的月份最终余额的结果,但我希望更加动态的报告,无论我们正在研究的年/月,而不仅仅是完全硬编码或一遍又一遍地重复相同的查询。但我真的碰壁了,因为我无法想出如何让它以更动态的方式运作。我对报告和数据分析很新,这基本上限制了我的进步。
SELECT T2.[Segment_0]+'-'+T2.[Segment_1]+'-'+T2.[Segment_2] Cuenta,
T2.[AcctName], SUM(T0.[Debit]) Debito, SUM(T0.[Credit]) Credito,
SUM(T0.[Debit])-SUM(T0.[Credit]) Saldo
FROM [server].[DB1].[dbo].[JDT1] T0
INNER JOIN [server].[DB1].[dbo].[OJDT] T1
ON T1.[TransId] = T0.[TransId]
INNER JOIN [server].[DB1].[dbo].[oact] T2
ON T2.[AcctCode] = T0.[Account]
WHERE T0.[RefDate] >= '2007-12-31' AND T0.[RefDate] <= '2016-06-30'
GROUP BY T2.[Segment_0]+'-'+T2.[Segment_1]+'-'+T2.[Segment_2],T2.[AcctName]
我不是在寻找有人为我做这件事,而是为了能够指出我并指导我做出最佳行动的人来实现这一目标。
答案 0 :(得分:0)
以下是一些建议:
我不清楚为什么你需要[server].[DB1].[dbo].[OJDT] T1
。其数据不会显示在输出中,也不需要将T0
加入T2
。如果您可以省略它,请执行此操作。
如果您因为需要从T0
中排除T1
以外的EXISTS
中的事务而无法省略它,请使用T0
子句而不是将其加入。
使用CTE按Account
对T2
条记录进行分组,然后将CTE加入T2
。这样T0
就不必加入;
WITH Summed as (
SELECT Account
, SUM(Credito) as SumCredito
...
FROM [JDT1] T0
WHERE T0.[RefDate] >= ...
GROUP BY Account
)
SELECT (.. your composite segment field ..)
, AccountName
, SumCredito
FROM Summed T1
JOIN [oact] T2
ON T1.account = T2.acctcode
中的每条记录,只需汇总结果即可。您也不需要按复合字段和帐户名进行分组,因为如果您在CTE中进行分组,则不会对它们进行分组。
这是一个看起来像什么的概述:
function urlDownload() {
var dataImport = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('dataImport');
var apiPoint = "http://www.fantasyfootballnerd.com/service/draft-projections/json/test/QB";
var response = UrlFetchApp.fetch(apiPoint);
var response_json = JSON.parse(response.getContentText());
var length = response_json.DraftProjections.length
var a = [];
for(i=0; i<length; i++){
dataImport.getRange(i+2, 1, 1, 1).setValue(response_json.DraftProjections[i].playerId)
dataImport.getRange(i+2, 2, 1, 1).setValue(response_json.DraftProjections[i].completions)
dataImport.getRange(i+2, 3, 1, 1).setValue(response_json.DraftProjections[i].attempts)
dataImport.getRange(i+2, 4, 1, 1).setValue(response_json.DraftProjections[i].passingYards)
dataImport.getRange(i+2, 5, 1, 1).setValue(response_json.DraftProjections[i].passingTD)
dataImport.getRange(i+2, 6, 1, 1).setValue(response_json.DraftProjections[i].passingInt)
dataImport.getRange(i+2, 7, 1, 1).setValue(response_json.DraftProjections[i].rushYards)
dataImport.getRange(i+2, 8, 1, 1).setValue(response_json.DraftProjections[i].rushTD)
dataImport.getRange(i+2, 9, 1, 1).setValue(response_json.DraftProjections[i].fantasyPoints)
dataImport.getRange(i+2, 10, 1, 1).setValue(response_json.DraftProjections[i].displayName)
dataImport.getRange(i+2, 11, 1, 1).setValue(response_json.DraftProjections[i].team)
}
}
如果您想要动态日期,您可能需要对其进行参数化并将其转换为存储过程(如果它还不是存储过程)。
希望这有帮助。