Sql server SQL Server:“(”附近的语法不正确。应为ID,SQL Pivot中引用了\u ID错误
我使用了CTE,上一次CTE出现编译错误。在谷歌上搜索了很长时间,但仍然不明白我在代码中犯了什么错误。所以请有人告诉我如何更改代码来修复错误消息 附近语法不正确。应为ID,带引号的\u ID 这个CTE抛出了错误,这是我代码中的最后一个CTESql server SQL Server:“(”附近的语法不正确。应为ID,SQL Pivot中引用了\u ID错误,sql-server,tsql,Sql Server,Tsql,我使用了CTE,上一次CTE出现编译错误。在谷歌上搜索了很长时间,但仍然不明白我在代码中犯了什么错误。所以请有人告诉我如何更改代码来修复错误消息 附近语法不正确。应为ID,带引号的\u ID 这个CTE抛出了错误,这是我代码中的最后一个CTE ,Cte2 AS ( SELECT * FROM (SELECT EarningID, Section, LineItem, DisplayInCSM, Type, B
,Cte2 AS
(
SELECT *
FROM
(SELECT
EarningID, Section, LineItem, DisplayInCSM, Type,
Broker, ItemValue, Period, hierarchy
FROM
Cte1) t
PIVOT
(MAX(ItemValue)
FOR Broker IN ([5W],[8K],[CL],[DA],[EQ],[FA],[GS],[HM],[HQ],[JY],[KW],[ML],[MS],[MV],[SL],[UA],[WB])
) AS P
)
我的完整代码
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
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,
@TickerID AS TickerID,
hierarchy = d.hierarchy + '.' + FORMAT(e.id,'0000'),
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.ItemValue, AA.Period,r.ColOrder
FROM DirectReports r
LEFT OUTER JOIN
(
Select b.*,L.ID AS LineItemID,L.TickerID
From tblOutputDetl_CSMTuner b
INNER JOIN TblLineItemTemplate L
ON b.LineItem= L.LineItem
WHERE b.Ticker=@Ticker AND L.TickerID=@TickerID
) AA
ON (AA.LineItemID=r.LineItemID
)
,Cte2 as
(
SELECT *
FROM
(
SELECT EarningID,Section,LineItem, DisplayInCSM, Type, Broker, ItemValue, Period,hierarchy
from Cte1
) t
PIVOT
(
MAX(ItemValue)
FOR Broker IN ([5W],[8K],[CL],[DA],[EQ],[FA],[GS],[HM],[HQ],[JY],[KW],[ML],[MS],[MV],[SL],[UA],[WB])
) AS P
)
SELECT * FROM Cte2 Order BY hierarchy
IF OBJECT_ID(N'tempdb..#Brokers') IS NOT NULL
BEGIN
DROP TABLE #Brokers
END
这里缺少一个右括号
ON (AA.LineItemID=r.LineItemID
非常感谢您的帮助。我一直坚持这个问题。在AA上。LineItemID=r.LineItemID应该在AA上。LineItemID=r.LineItemID。个人宠物皮:它不是;WITH它只是WITH。;是一个语句终止符;它位于批处理中每个语句的末尾。它不是一个开始符,也不只是在需要的语句的开头请正确终止上一条语句。正确终止所有语句。无论如何,不这样做是不可取的,所以现在就开始建立良好的做法。@Larnu谢谢