需要一些帮助按月为客户及其代理商渠道获取销售
有一个看起来像这样的客户表
客户表: cust_id bigint, agent_id bigint, name varchar(200), customer_level int, date_signed datetime
客户级别= 1可以进行交易的客户; agent_id = null customer_level = 2是level_1客户的代理并且可以进行交易,level_1 cust_id = level_2 agent_id
交易表: tx_id bigint, tx_date日期时间, description varchar(200), 金额, cust_id bigint
SELECT datepart(month, t.tx_date) AS TX_MONTH
,CASE
WHEN c.customer_level = 2
THEN a.NAME
ELSE c.NAME
END AS CUSTOMER
,count(t.amount)
,sum(t.amount)
FROM TRANSACTION t
INNER JOIN customer c ON t.cust_id = c.cust_id
LEFT JOIN customer a ON c.agent_id = a.cust_id
WHERE t.tx_date >= '2014-01-01 00:00:00.000'
GROUP BY datepart(month, t.tx_date)
ORDER BY 1 ASC
===
对于初学者来说这个sql不会工作需要按c.name,a.name
进行分组然而,预期的结果将无法实现....这是通过客户及其代理渠道获得月度销售
HELP!
答案 0 :(得分:0)
我做的假设:
如果在新年边界使用此报告,您可能希望将年份作为结果集的一部分。
您可能希望将参数传递给此查询,我将使用@CustID BIGINT和@StartDate DATE,@ EndDate DATE来帮助限制行,以便在大型结果集的情况下出于性能原因
您需要按照select子句中使用的表达式进行分组。
试试这个:
SELECT MONTH(t.tx_date) AS TX_MONTH, YEAR(t.tx_date) AS TX_YEAR ,CASE WHEN c.customer_level = 2 THEN a.NAME ELSE c.NAME END AS CUSTOMER ,count(t.amount) ,sum(t.amount) FROM TRANSACTION t INNER JOIN customer c ON t.cust_id = c.cust_id LEFT JOIN customer a ON c.agent_id = a.cust_id WHERE CAST(t.tx_date AS DATE) BETWEEN @StartDate AND @EndDate AND c.cust_id = @CustID GROUP BY YEAR(t.tx_date), MONTH(t.tx_date) ,CASE WHEN c.customer_level = 2 THEN a.NAME ELSE c.NAME END ORDER BY YEAR(t.tx_date), MONTH(t.tx_date)
对于两个日期之间的给定客户,这应该为您提供一个结果集,其中包含代理商名称或客户名称的年份,交易月份。