如何将已完成的项目按交易月份分成几列?
How do I sum items fulfilled split into columns by transaction month?
我正在尝试使用与我的 Netsuite 数据库的 ODBC 连接来汇总每个月的商品销售额。我 运行 使用 Microsoft Excel 的数据库连接进行查询,所以我 认为 它使用的是 T-SQL 标准,至少从我试过的。
我写这个查询是为了给我一份来自项目履行交易的项目列表。具有实际 item_id
的行项目存储在 TRANSACTION_LINES
table 中,交易类型在 TRANSACTIONS
table 中,因此连接。
SELECT trandate
,item_id
,item_count
FROM Administrator.TRANSACTIONS
,Administrator.TRANSACTION_LINES
WHERE Administrator.TRANSACTIONS.transaction_id = Administrator.TRANSACTION_LINES.transaction_id
AND trandate >= TRUNC(ADD_MONTHS(GETDATE(), - 6), 'month')
AND transaction_type = 'Item Fulfillment'
这给了我一个 table 像这样:
trandate item_id item_count
2/3/2016 0:00 13035 -2
2/3/2016 0:00 13035 2
2/3/2016 0:00 13035 -2
2/3/2016 0:00 2809 -2
2/3/2016 0:00 2809 2
2/3/2016 0:00 2809 -2
2/3/2016 0:00 13049 -2
2/3/2016 0:00 13049 2
2/3/2016 0:00 13049 -2
2/3/2016 0:00 13111 -2
2/3/2016 0:00 13111 2
2/3/2016 0:00 13111 -2
2/2/2016 0:00 13103 -1
2/2/2016 0:00 13103 1
2/2/2016 0:00 13103 -1
2/2/2016 0:00 195712 -2
2/1/2016 0:00 213120 -2
2/1/2016 0:00 213120 2
2/1/2016 0:00 213120 -2
2/1/2016 0:00 213122 -2
2/1/2016 0:00 213122 2
2/1/2016 0:00 213122 -2
你可以想象这会持续一段时间,因为一切都可以追溯到八月。我认为交替否定是 Netsuite 对股票对不同账户的影响所做的事情,尽管如果有人也想为此提供更多见解,我将不胜感激
所以现在我尝试使用 case when
和总和来调整此查询。我只打算放置第一个月的列,因为接下来的月份是相同的,-1
相应地改变了。我还否定了数量,因此总和将为正数。
SELECT A.item_id
,sum(CASE
WHEN A.trandate BETWEEN TRUNC(ADD_MONTHS(GETDATE(), - 1), 'month')
AND LAST_DAY(ADD_MONTHS(GETDATE(), - 1))
THEN - 1 * A.item_count
ELSE 0
END) as OneMonthSales
FROM (--the query we defined earlier, now as a subquery
SELECT trandate
,item_id
,item_count
FROM Administrator.TRANSACTIONS
,Administrator.TRANSACTION_LINES
WHERE Administrator.TRANSACTIONS.transaction_id = Administrator.TRANSACTION_LINES.transaction_id
AND trandate >= TRUNC(ADD_MONTHS(GETDATE(), - 6), 'month')
AND transaction_type = 'Item Fulfillment'
) AS A
group by A.item_id
Excel 不想执行此查询。
如果我从 group by A.item_id
中删除 A.
前缀,我会得到同样的错误。
如果我注释掉 group by
子句,查询将执行 return 带有 item_id 的 table 和一个月销售额的一列,但是 item_id 行仍然重复(似乎更多次)。这对我来说似乎很奇怪,因为我认为不在聚合函数中的每一列都需要在 group by
子句中,否则它应该抛出错误。
我该如何修复此查询,以便它能够正确调整并计算每个 item_id 的数量?如果我能让它工作一个月,我可能可以根据需要延长它。
我将查询包装在另一个 select 语句中,如下所示:
--get sales data
SELECT item_id, sum(OneMonthSales)
FROM (
SELECT item_id
,sum(CASE
WHEN A.trandate BETWEEN TRUNC(ADD_MONTHS(GETDATE(), - 1), 'month')
AND LAST_DAY(ADD_MONTHS(GETDATE(), - 1))
THEN - 1 * A.item_count
ELSE 0
END) as OneMonthSales
FROM (
SELECT trandate
,item_id
,item_count
FROM Administrator.TRANSACTIONS
,Administrator.TRANSACTION_LINES
WHERE Administrator.TRANSACTIONS.transaction_id = Administrator.TRANSACTION_LINES.transaction_id
AND trandate >= TRUNC(ADD_MONTHS(GETDATE(), - 6), 'month')
AND transaction_type = 'Item Fulfillment'
) AS A
)
group by item_id
这符合我的预期,但如果有人可以提供一个没有这个的答案,或者一个解释为什么有必要的答案,我会接受那个答案。
我正在尝试使用与我的 Netsuite 数据库的 ODBC 连接来汇总每个月的商品销售额。我 运行 使用 Microsoft Excel 的数据库连接进行查询,所以我 认为 它使用的是 T-SQL 标准,至少从我试过的。
我写这个查询是为了给我一份来自项目履行交易的项目列表。具有实际 item_id
的行项目存储在 TRANSACTION_LINES
table 中,交易类型在 TRANSACTIONS
table 中,因此连接。
SELECT trandate
,item_id
,item_count
FROM Administrator.TRANSACTIONS
,Administrator.TRANSACTION_LINES
WHERE Administrator.TRANSACTIONS.transaction_id = Administrator.TRANSACTION_LINES.transaction_id
AND trandate >= TRUNC(ADD_MONTHS(GETDATE(), - 6), 'month')
AND transaction_type = 'Item Fulfillment'
这给了我一个 table 像这样:
trandate item_id item_count
2/3/2016 0:00 13035 -2
2/3/2016 0:00 13035 2
2/3/2016 0:00 13035 -2
2/3/2016 0:00 2809 -2
2/3/2016 0:00 2809 2
2/3/2016 0:00 2809 -2
2/3/2016 0:00 13049 -2
2/3/2016 0:00 13049 2
2/3/2016 0:00 13049 -2
2/3/2016 0:00 13111 -2
2/3/2016 0:00 13111 2
2/3/2016 0:00 13111 -2
2/2/2016 0:00 13103 -1
2/2/2016 0:00 13103 1
2/2/2016 0:00 13103 -1
2/2/2016 0:00 195712 -2
2/1/2016 0:00 213120 -2
2/1/2016 0:00 213120 2
2/1/2016 0:00 213120 -2
2/1/2016 0:00 213122 -2
2/1/2016 0:00 213122 2
2/1/2016 0:00 213122 -2
你可以想象这会持续一段时间,因为一切都可以追溯到八月。我认为交替否定是 Netsuite 对股票对不同账户的影响所做的事情,尽管如果有人也想为此提供更多见解,我将不胜感激
所以现在我尝试使用 case when
和总和来调整此查询。我只打算放置第一个月的列,因为接下来的月份是相同的,-1
相应地改变了。我还否定了数量,因此总和将为正数。
SELECT A.item_id
,sum(CASE
WHEN A.trandate BETWEEN TRUNC(ADD_MONTHS(GETDATE(), - 1), 'month')
AND LAST_DAY(ADD_MONTHS(GETDATE(), - 1))
THEN - 1 * A.item_count
ELSE 0
END) as OneMonthSales
FROM (--the query we defined earlier, now as a subquery
SELECT trandate
,item_id
,item_count
FROM Administrator.TRANSACTIONS
,Administrator.TRANSACTION_LINES
WHERE Administrator.TRANSACTIONS.transaction_id = Administrator.TRANSACTION_LINES.transaction_id
AND trandate >= TRUNC(ADD_MONTHS(GETDATE(), - 6), 'month')
AND transaction_type = 'Item Fulfillment'
) AS A
group by A.item_id
Excel 不想执行此查询。
如果我从 group by A.item_id
中删除 A.
前缀,我会得到同样的错误。
如果我注释掉 group by
子句,查询将执行 return 带有 item_id 的 table 和一个月销售额的一列,但是 item_id 行仍然重复(似乎更多次)。这对我来说似乎很奇怪,因为我认为不在聚合函数中的每一列都需要在 group by
子句中,否则它应该抛出错误。
我该如何修复此查询,以便它能够正确调整并计算每个 item_id 的数量?如果我能让它工作一个月,我可能可以根据需要延长它。
我将查询包装在另一个 select 语句中,如下所示:
--get sales data
SELECT item_id, sum(OneMonthSales)
FROM (
SELECT item_id
,sum(CASE
WHEN A.trandate BETWEEN TRUNC(ADD_MONTHS(GETDATE(), - 1), 'month')
AND LAST_DAY(ADD_MONTHS(GETDATE(), - 1))
THEN - 1 * A.item_count
ELSE 0
END) as OneMonthSales
FROM (
SELECT trandate
,item_id
,item_count
FROM Administrator.TRANSACTIONS
,Administrator.TRANSACTION_LINES
WHERE Administrator.TRANSACTIONS.transaction_id = Administrator.TRANSACTION_LINES.transaction_id
AND trandate >= TRUNC(ADD_MONTHS(GETDATE(), - 6), 'month')
AND transaction_type = 'Item Fulfillment'
) AS A
)
group by item_id
这符合我的预期,但如果有人可以提供一个没有这个的答案,或者一个解释为什么有必要的答案,我会接受那个答案。