October 16, 2020 at 6:31 pm
Good Afternoon,
I have been racking my brain out for hours trying to figure out why my Dynamic Pivot is return all NULLs. Any help or suggestions would be greatly appreciated.
I apologize for the formatting of the SQL. I can not figure out how to insert the code in this forum and keep the formatting. I did the best I could.
USE [MarketingAnalysis]
DECLARE @StartDateTime DATETIME;
DECLARE @EndDateTime DATETIME;
SET @StartDateTime = '2019-01-01 00:00:00.000';
SET @EndDateTime = '2019-12-31 23:59:59.999';
IF EXISTS ( SELECT 1 FROM tempdb.dbo.sysobjects WHERE ID = OBJECT_ID(N'tempdb..#Temp') )
DROP TABLE #Temp;
DECLARE @SQL as nvarchar(Max)
DECLARE @ColumnName as nvarchar(MAX)
-- List of Column Names
Select @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(MonthYearOf)
From
(
Select DISTINCT REPLACE(replace((DATENAME(Month,[DateTime_DataInsert]) + '-' + RIGHT(DatePart(Year, [DateTime_DataInsert]),2)), CHAR(13),''), CHAR(10),'') as MonthYearOf
From [MarketingAnalysis].[dbo].[Owner_Marketing_Dialer_Output_Historical]
Where [DateTime_DataInsert] between @StartDateTime and @EndDateTime
) as B
Order By B.MonthYearOF
Select
ListDesc,
WEEK_OF_MONTH,
SUM(RecordCount) as RecordCount,
MonthYearOf
Into #TEMP
From
(
Select
CASE WHEN [List_Description] like 'OWP%' THEN 'OWP_MAIN'
WHEN [List_Description] like 'LEADGEN%' THEN 'LEADGEN'
ELSE [List_Description] ENDas ListDesc,
CONVERT(DATE,[DateTime_DataInsert]) as WeekOf,
DATEDIFF(week,0,CONVERT(DATE,[DateTime_DataInsert]) ) - (DATEDIFF(week,0,DATEADD(dd, -DAY(CONVERT(DATE,[DateTime_DataInsert]) )+1, CONVERT(DATE,[DateTime_DataInsert]) ))-1) as WEEK_OF_MONTH,
(DATENAME(Month,[DateTime_DataInsert]) + ' ' + RIGHT(DatePart(Year,[DateTime_DataInsert]),2) ) as MonthYearOf ,
1 as RecordCount
From [MarketingAnalysis].[dbo].[Owner_Marketing_Dialer_Output_Historical]
Where [DateTime_DataInsert] between @StartDateTime and @EndDateTime
and List_Description IN ('EXP_PKG_1','LEADGEN' ,'LEADGEN_DS','LEADGEN1', 'LEADGEN2', 'OWP_MAIN','OWP_MAIN_2','OWP_Elite_OP')
)x
Group By
ListDesc,
WEEK_OF_MONTH,
MonthYearOf
SET @SQL =
N'Select DISTINCT ListDesc, WEEK_OF_MONTH, ' + @ColumnName + '
FROM #Temp
PIVOT(MAX(RecordCount)
For MonthYearOf IN ('+@ColumnName+')) as Pivottable'
EXEC sp_executesql @SQL;
October 17, 2020 at 12:16 am
You really haven't given us anything to go on. Just listing a bunch of code that returns a NULL result set isn't much of a clue.
Have you tried printing the contents of the @SQL variable instead of executing it to see what it contains?
Same question for the @ColumnName variable.
Same question for the #Temp table.
--Jeff Moden
Change is inevitable... Change for the better is not.
October 19, 2020 at 2:24 pm
Good Morning Jeff,
Yes, The first thing I did was print @SQL & @ColumnName variable. Both looks ok to the eye, with the exception of the NULL's.
Here are the results:
This is what the numbers should look like
Does this help paint a better picture of the issue?
Thank you,
Dawn
October 19, 2020 at 5:57 pm
Any chance you could include all of the code from the variable (as code, not a graphic, please) that gets executed so I can have a look?
--Jeff Moden
Change is inevitable... Change for the better is not.
October 19, 2020 at 6:42 pm
Your SQL look right, but we don't have your data set, so it's hard to troubleshoot
Create table #t (ListDesc varchar(20), WeekOfMonth int, RecordCount int, MonthYearOf varchar(20))
insert into #t values
('EXP_PKG_1',1,100, 'April 19'),
('EXP_PKG_1',2,100, 'April 19'),
('EXP_PKG_1',3,95, 'April 19'),
('EXP_PKG_1',4,100, 'April 19'),
('EXP_PKG_1',2,200, 'August 19'),
('EXP_PKG_1',3,100, 'August 19'),
('EXP_PKG_1',4,78, 'August 19'),
('EXP_PKG_1',5,38, 'August 19'),
('EXP_PKG_1',1,100, 'December 19'),
('EXP_PKG_1',2,100, 'December 19'),
('EXP_PKG_1',3,100, 'December 19'),
('EXP_PKG_1',4,79, 'December 19'),
('EXP_PKG_1',1,100, 'February 19'),
('EXP_PKG_1',2,100, 'February 19'),
('EXP_PKG_1',3,100, 'February 19')
DECLARE @SQL as nvarchar(Max)
DECLARE @ColumnName as nvarchar(MAX)
-- List of Column Names
Select @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(MonthYearOf)
From
(
Select DISTINCT MonthYearOf
From #t
) as B
Order By B.MonthYearOF
SET @SQL =
N'Select DISTINCT ListDesc, WEEKOFMONTH, ' + @ColumnName + '
FROM #T
PIVOT(MAX(RecordCount)
For MonthYearOf IN ('+@ColumnName+')) as Pivottable'
EXEC sp_executesql @SQL;
For better, quicker answers, click on the following...
http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following...
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
October 20, 2020 at 5:02 am
It appears that you may have a mismatch between your @ColumnName and your @SQL
/*
@ColumnName ... DATENAME(Month,[DateTime_DataInsert]) + '-' + RIGHT(DatePart(Year, [DateTime_DataInsert]), 2)
@SQL ... DATENAME(Month,[DateTime_DataInsert]) + ' ' + RIGHT(DatePart(Year, [DateTime_DataInsert]), 2)
*/
Viewing 6 posts - 1 through 5 (of 5 total)
You must be logged in to reply to this topic. Login to reply