我需要查询每个客户的趋势。由于并非所有客户每月都会购买一些东西,因此有一个月我没有获得该客户的数据,但我仍然需要将该月份视为零。
我想在每个月创建一个表格,我希望看到:
select DISTINCT CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(loaddate)-1),loaddate),126) AS meses
into dbo.gp_MESES
FROM CustomerDebits AS D WITH (NOLOCK)
WHERE LOADDATE>='20130101' AND LOADDATE<=GETDATE()
ORDER BY 1;
和lef在每个月购买每个客户的情况。
SELECT CODEMP, CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(loaddate)-1),loaddate),126) AS FECHA_MES,
COUNT(*) AS Q_CLIENTES
INTO DBO.GP_TEND_0
FROM CustomerDebits AS D WITH (NOLOCK)
WHERE LOADDATE<=GETDATE() AND LOADDATE>='20130101'
GROUP BY CODEMP, CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(loaddate)-1),loaddate),126);
问题在于,当顾客没有做任何事情时,我仍然没有看到0行。我正在考虑用每个客户组合创建一个表 - 几个月之后加入,但效率不高。
你知道我怎么解决这个问题?
谢谢!
答案 0 :(得分:0)
你应该能够在meses = FECHA_MES上将DBB.GP_TEND_0全部外连接dbo.gp_MESES表并利用NULL来获得你正在寻找的零值。
我设想这样的事情:
SELECT COALESCE(T2.FECHA_MES, T1.MESES) AS MONTH --THIS WILL PULL MESES WHERE FECHA_MES IS NULL
,T2.CODEMP
,ISNULL(T2.Q_CLIENTES, 0) AS PURCHASES --THIS WILL GIVE YOU 0 WHERE Q_CLIENTES IS NULL
FROM dbo.gp_MESES T1
FULL OUTER JOIN DBO.GP_TEND_0 T2
ON T1.MESES = T2.FECHA_MES