0

私はピボットテーブルを使用していますが、実行するとこのエラーが発生しました。これで立ち往生しています。間違いがあれば申し訳ありません。また、SQLサーバーで文字列内の文字列を処理する方法を教えてください" '' ''を使用しています。 「-」「しかし、それが正しいかどうかはわかりません。できるだけ早く私を助けてください。ここにクエリがあります

SELECT @SQL = 'SELECT '  

WHile @I <= @Months  
BEGIN  
      SET @YearMonth = REPLACE(LTRIM(SUBSTRING(CONVERT(VARCHAR, DateAdd(Month, @I, @StartDate), 13), 3,9)), ' ', '-')  
      SET @ColumnText = @YearMonth  
      SET @SQL = @SQL + 'ISNULL([' + @YearMonth + '], 0.00) as ''' + @ColumnText + ''','  
      SET @I = @I +1        
END  

Set @I = 0  

SET @SQL = @SQL + 'Product,Supplier,PackPrice,QuantityInPack,Code,SupplierID,Description,RebateAmount

FROM  
(  
SELECT p.NAME AS product,p.Code AS Code,P.Description as Description,oi.PackPrice,oi.QuantityInPack AS Packsize,S.ID AS SupplierID,s.[Name] AS Supplier,
CASE when oi.RebateType=2 then (oi.PackPrice*oi.RebateAmount)/100 ELSE oi.RebateAmount END AS RebateAmount ,o.Total as TotalSale,
  REPLACE(LTRIM(SUBSTRING(CONVERT(VARCHAR, O.CreatedDate, 13), 3,9)), '' '',''-'') as tdate  
  FROM dbo.SCM_Product p WITH (NOLOCK)
  INNER JOIN SCM_OrderItem oi WITH (NOLOCK) ON oi.ProductId = p.ID  
  LEFT OUTER JOIN dbo.SCM_Supplier s WITH(NoLock) ON oi.SupplierID=s.ID
  LEFT OUTER  JOIN SCM_Order o WITH (NOLOCK) ON o.Id = oi.ProductId AND  O.Status <> 5 -- CANCELLED
  AND O.Deleted = 0     

  WHERE ('''+@SupplierID+''' IS NULL OR  s.ID IN (SELECT * FROM GetIDsTableFromIDsList(@SupplierID)))  
  AND ('''+@ProductID+''' IS NULL OR p.ID IN (SELECT * FROM GetIDsTableFromIDsList(@ProductID)) )  
  AND (o.CreatedDate >= '''+ dbo.GetDatePart(@StartDate) +''' AND o.CreatedDate <= '''+ dbo.GetDatePart(@Enddate) +''') 
  GROUP BY  REPLACE(LTRIM(SUBSTRING(CONVERT(VARCHAR, o.CreatedDate, 13), 3,9)), '' '',''-''),
 s.ID,p.Code,p.NAME,s.NAME,P.Description,oi.packPrice,oi.QuantityInPack,oi.RebateAmount,oi.RebateType,oi.PackPrice,o.Total


) SD  
PIVOT  
( SUM( SD.TotalSale) FOR SD.tdate IN ('  
WHile @I <= @Months  
BEGIN  
      SET @YearMonth = REPLACE(LTRIM(SUBSTRING(CONVERT(VARCHAR, DateAdd(Month, @I, @StartDate), 13), 3,9)), ' ', '-')  

      IF @I = @Months  
            BEGIN  
                  SET @SQL = @SQL + ' [' + @YearMonth + ']'          
            END  
      ELSE  
            BEGIN  
                  SET @SQL = @SQL + ' [' + @YearMonth + '],'   
            END  

      SET @I = @I +1  

END  

SET @SQL = @SQL + ')) as pvt  
ORDER BY Supplier '  

--EXEC(@SQL)
  PRINT @SQL 
4

1 に答える 1