我正在尝试生成一个报告,到目前为止已经完成了一个报告,它给了我每天有多少订单处于状态1-9。
TableA结构如下所示:
Sales Order | Order Status | Order Date
123456789 | 1 | 2017-02-22 00:00:00.000
123456790 | 0 | 2017-02-21 00:00:00.000
TableB结构如下所示:
Sales Order | Price
123456789 | 123.00
123456789 | 42.00
123456790 | 56.00
123456790 | 28.00
此代码:
SELECT
MAX(year([OrderDate])) as Yr,
MAX(MONTH([OrderDate])) as M,
Day([OrderDate]) as Day,
sum(case when [OrderStatus]='0' THEN 1 ELSE 0 END) AS 'STATUS"0"',
sum(case when [OrderStatus]='1' THEN 1 ELSE 0 END) AS 'STATUS"1"',
sum(case when [OrderStatus]='2' THEN 1 ELSE 0 END) AS 'STATUS"2"',
sum(case when [OrderStatus]='4' THEN 1 ELSE 0 END) AS 'STATUS"4"',
sum(case when [OrderStatus]='8' THEN 1 ELSE 0 END) AS 'STATUS"8"',
sum(case when [OrderStatus]='9' THEN 1 ELSE 0 END) AS 'STATUS"9"',
sum(case when [OrderStatus]='S' THEN 1 ELSE 0 END) AS 'STATUS"S"',
sum(case when [OrderStatus]='*' THEN 1 ELSE 0 END) AS 'STATUS"*"',
sum(case when [OrderStatus]='/' THEN 1 ELSE 0 END) AS 'STATUS"/"'
FROM
SorMaster
WHERE
YEAR([OrderDate]) = YEAR(GETDATE())
GROUP BY
DATENAME(month, DateAdd(month, Month([OrderDate]) - 1, Cast('2008-01-01' AS Datetime))), Day([OrderDate])
ORDER BY
Yr DESC, M DESC, Day DESC
返回:
Yr | M | Day | STATUS"0" | STATUS"1" | STATUS"2" | STATUS"4" | STATUS"8" | STATUS"9" | STATUS"S" | STATUS"*" | STATUS"/"
2017 2 22 0 2 0 1 0 0 5 0 0
2017 2 21 0 0 0 7 0 0 0 0 0
这对我的第一份报告来说是完美的。
现在,麻烦来了。我的问题是我需要对表B进行嵌套查询,这样我就不需要返回一个计数(订单),而是需要总和(订单)每个订单的总数在表B中。
使用上面的示例,查询需要返回如下内容:
Yr | M | Day | STATUS"0" | STATUS"1" | STATUS"2" | STATUS"4" | STATUS"8" | STATUS"9" | STATUS"S" | STATUS"*" | STATUS"/"
2017 2 22 0 165 0 0 0 0 0 0 0
2017 2 21 84 0 0 0 0 0 0 0 0
任何指针?
答案 0 :(得分:1)
加入var getTabIds = function getTabIds(result) {
if (result.success) {
//var returnObject = new Array();
var returnObject = new Object();
for (i = 0; i < result.ids.length; i++) {
sforce.console.getSubtabIds(result.ids[i], function (subTabResult) {
if (subTabResult.success) {
for (i = 0; i < subTabResult.ids.length; i++) {
var subTabId = subTabResult.ids[i];
sforce.console.getPageInfo(subTabId, function (page) {
var subTabInfo = jQuery.parseJSON(page.pageInfo);
var id = subTabInfo.objectId.toString();
returnObject[id] = subTabInfo;
Object.defineProperty(returnObject, id, {
enumerable: true
});
//returnObject.push(page.pageInfo);
});
}
console.log("returnObject", returnObject);
var returnString = JSON.stringify(returnObject);
console.log("returnString", returnString);
console.log("keys", Object.keys(returnObject));
console.log(Object.getOwnPropertyNames(returnObject), returnObject["001N0000016Shzx"])
$Lightning.use("c:LO_InteractionLogApp", function() {
$Lightning.createComponent("c:LO_InteractionLogComponent",
null,
"lightning",
function(cmp) {
var myExternalEvent;
myExternalEvent = $A.get("e.c:InteractionLogRelatedRecordsResponse");
myExternalEvent.setParams({
"response": returnString
});
myExternalEvent.fire();
});
});
}
});
}
}
};
:
TableB
答案 1 :(得分:1)
这不是太困难,只是表B中的LEFT JOIN,然后将价格汇总在一起。这里有几个小技巧。您希望LEFT JOIN以确保表A中的行始终显示,即使表B中没有相应的行。其次,在SUM()
语句中,您需要添加{{1确保您对小数进行求和,并且COALESCE(...,0.00)
没有NULL
值。奇怪的是,数据库LEFT JOIN
。
对于以下查询,您需要将NULL + {anything} = NULL
的名称更改为表名称,并且TableB
谓词需要准确命名列名称,并且如果它们包含空格则正确分隔。例如,在MSSQL中,分隔符为JOIN
和[
,例如]
MyTable.[My Column With Spaces]
答案 2 :(得分:0)
通过(左)加入tableB并替换你的&#39;计数&#39;通过tableB.price,你应该获得具有相应状态的所有订单头寸的总和。