私はピボットテーブルを使用していますが、実行するとこのエラーが発生しました。これで立ち往生しています。間違いがあれば申し訳ありません。また、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