如何解决动态数据透视表和数据未开始正确返回
我必须以透视格式显示数据,其中 Broker 将水平显示。 SQL 查询运行良好,但通常 MAX(ItemValue_NoFormat)
返回 NULL
。无法诊断未达到期望值的区域。
这是我尝试过的完整代码:
DECLARE @SQL as VARCHAR(MAX)
DECLARE @Columns as VARCHAR(MAX)
DECLARE @Ticker VARCHAR(20),@TickerID VARCHAR(20),@ClientCode VARCHAR(20)
DECLARE @CSM_ID INT
SET @TickerID = 'ADS'
SET @ClientCode = 'ADS'
IF OBJECT_ID(N'tempdb..#Brokers') IS NOT NULL
BEGIN
DROP TABLE #Brokers
END
IF OBJECT_ID(N'tempdb..#tmpData1') IS NOT NULL
BEGIN
DROP TABLE #tmpData1
END
SELECT DISTINCT @Ticker = Ticker
FROM tblTickerMasterId
WHERE MasterId = @TickerID
SELECT TOP 1 @CSM_ID = CSM_ID
FROM tblCSM_Tuner_Client
WHERE TickerID = @TickerID
SELECT *
INTO #Brokers
FROM
(SELECT A.BrokerCode,B.BrokerName
FROM tblClientBroker_Earnings A
JOIN tblBroker B ON SUBSTRING(A.BrokerCode,1,LEN(A.BrokerCode) - CHARINDEX('-',A.BrokerCode)) = B.Brokercode
WHERE A.ClientCode = @ClientCode
AND A.Ticker = @Ticker
/* AND A.BrokerCode IN (SELECT [DATA] FROM SplitStringToTable(@SelectedBrokers,',') WHERE TRIM([DATA])<>'')*/
) x
SELECT @Columns = COALESCE(@Columns + ','') + QUOTENAME(BrokerCode)
FROM
(SELECT DISTINCT BrokerCode
FROM #Brokers
WHERE TRIM(BrokerCode) <> '') AS B
ORDER BY B.BrokerCode
;WITH DirectReports AS
(
SELECT CSM_ID,ID,ParentID,DisplayInCSM,Type,FontName,FontStyle,FontSize,UnderLine,BGColor,LineItemID,Presentation,BrokerOrientation,AnnualFormat,CalculationMethod,Indent,FGColor,Box,HeadingSubHeading,ColOrder,@TickerID AS TickerID,hierarchy = FORMAT(ID,'0000'),level = 0
FROM tblCSM_ModelDetails
WHERE ISNULL(ParentID,0) = 0
AND Type<>'BM'
AND CSM_ID=@CSM_ID
UNION ALL
SELECT e.CSM_ID,e.ID,e.ParentID,e.DisplayInCSM,e.Type,e.FontName,e.FontStyle,e.FontSize,e.UnderLine,e.BGColor,e.LineItemID,e.Presentation,e.BrokerOrientation,e.AnnualFormat,e.CalculationMethod,e.Indent,e.FGColor,e.Box,e.HeadingSubHeading,e.ColOrder,hierarchy = d.hierarchy + '.' + FORMAT(e.id,level = level + 1
FROM tblCSM_ModelDetails e
JOIN DirectReports d on e.ParentID = d.ID
WHERE e.Type<>'BM'
AND e.CSM_ID=@CSM_ID
),Cte1 as
(
SELECT AA.EarningID,AA.Section,AA.LineItem,AA.Ticker,r.DisplayInCSM,r.Type,r.hierarchy,AA.Broker,AA.BrokerName,AA.ItemValue_NoFormat,AA.Period,r.ColOrder
FROM DirectReports r
LEFT OUTER JOIN
(
Select b.*,L.ID AS LineItemID,L.TickerID,c.BrokerName
From tblOutputDetl_CSMTuner b
INNER JOIN TblLineItemTemplate L
ON b.LineItem= L.LineItem
INNER JOIN #Brokers c
ON SUBSTRING(b.Broker,len(b.Broker)-charindex('-',b.Broker))=c.BrokerCode
WHERE b.Ticker=@Ticker AND L.TickerID=@TickerID AND TRIM(b.Broker)<>''
) AA
ON AA.LineItemID=r.LineItemID
)
SELECT * INTO #tmpData1 FROM Cte1
SET @SQL='SELECT *
FROM
(
SELECT EarningID,Section,LineItem,Broker,BrokerName,ItemValue_NoFormat,Period,hierarchy
from #tmpData1
) t
PIVOT
(
MAX(ItemValue_NoFormat)
FOR Broker IN ('+@Columns+')
) AS P
ORDER BY hierarchy,EarningID
'
EXEC(@SQL)
IF OBJECT_ID(N'tempdb..#Brokers') IS NOT NULL
BEGIN
DROP TABLE #Brokers
END
IF OBJECT_ID(N'tempdb..#tmpData1') IS NOT NULL
BEGIN
DROP TABLE #tmpData1
END
Specially this area not showing Broker value properly.
SET @SQL='SELECT *
FROM
(
SELECT EarningID,EarningID
'
EXEC(@SQL)
请告诉我我的代码中存在什么样的错误,其中 Broker Pivot 数据未正确显示值。一些经纪商显示价值,但有些经纪商在 PIVOT 中没有显示价值。
当我查询我的临时表以查看是否有特定条件的值并且显示值存在于创建 PIVOT 的临时表中。这是那个查询。
select *
from #tmpData1
where ticker = 'ADS'
and section = 'Segment Details'
and lineitem = 'LoyaltyOne - Revenue'
and period= '2Q 2017A'
and broker = 'CL'
order by hierarchy,EarningID
PIVOT
是从上面的临时表 #tmpData1
创建的。当使用条件查询临时表时,我得到了正确的值,但是当从同一个临时表 #tmpData1
创建数据透视表时,section->Segment Details 将返回 NULL
, lineitem->LoyaltyOne - 收入、经纪人-> CL 和期间-> 2017A 年第二季度
请建议我需要修复或更改的内容以解决此问题。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。