I want to write a SQL Server stored procedure to retrieve pivoted result from this query
ALTER procedure [dbo].[sp_get_list_penerimaan_pks]
(@tahun int,
@bulan int,
@pks int)
as
begin
SET NOCOUNT ON;
declare @cols AS NVARCHAR(MAX);
declare @query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.asal)
FROM (
SELECT
cpo.tanggal,
dg.asal,
(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))) )-(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))))) * 0.02))
as harga_beli_tbs_bersih
FROM
cpopko cpo
LEFT JOIN DAILY_GUU AS dg ON CONVERT (datetime, dg.tglolah, 103) = cpo.tanggal
LEFT JOIN PNL_TR_HARGA_KOMODITI AS ko ON ko.tanggal = cpo.tanggal
WHERE
YEAR (cpo.tanggal) >= @tahun and pks=@pks and month(cpo.tanggal)=@bulan
) c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT tanggal, ' + @cols + ' from
(
SELECT
cpo.tanggal,
dg.asal,
(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))) )-(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))))) * 0.02))
as harga_beli_tbs_bersih
FROM
cpopko cpo
LEFT JOIN DAILY_GUU AS dg ON CONVERT (datetime, dg.tglolah, 103) = cpo.tanggal
LEFT JOIN PNL_TR_HARGA_KOMODITI AS ko ON ko.tanggal = cpo.tanggal
WHERE
YEAR (cpo.tanggal) >= '+@tahun +' and pks=@pks and month(cpo.tanggal)=@bulan
) x
pivot
(
max(harga_beli_tbs_bersih)
for asal in (' + @cols + ')
) p '
execute(@query)
end
but I got this error result :
Procedure execution failed 22018 - [SQL Server]Conversion failed when converting the nvarchar value 'SELECT tanggal, [54],[11],[56],[53],[40],[21],[12] from ( SELECT cpo.tanggal, dg.asal, (((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))) )-(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float) / (NULLIF(dg.tbs_diolah, 0)))))) * 0.02)) as harga_beli_tbs_bersih FROM cpopko cpo LEFT JOIN DAILY_GUU AS dg ON CONVERT (datetime, dg.tglolah, 103) = cpo.tanggal LEFT JOIN PNL_TR_HARGA_KOMODITI AS ko ON ko.tanggal = cpo.tanggal WHERE YEAR (cpo.tanggal) >= ' to data type int.
I'm totally confused about this error. I already do some research from google but still cant fix the issues. Hope you guys can help me - thanks in advance.