ورود

View Full Version : PIVOT بر اساس یک فیلد رشته ای



SMirzakarimi
شنبه 26 تیر 1389, 15:51 عصر
من یک فیلد رشته ای دارم که روش PIVOT می زنم اما ERROR میده
میشه کمکم کنید؟
اینه QUERY

[LEFT]SELECT HCode ,112 as C112,113 as C113
FROM
(SELECT SUBSTRING(SSHCode ,1,8) HCode ,SSBes ,SSBed ,SYY

FROM [Saroj].[dbo].[HesabSubSanad] INNER JOIN
HesabSanad on HesabSubSanad.SSSCode=HesabSanad.SCode
WHERE SSYY= 1388 AND substring(SSHCode ,9,5)= 112 AND
dbo.MiladiToShamsi_10(SDate)>='1388/01/01' AND
dbo.MiladiToShamsi_10(SDate)<='1388/12/29'
AND HesabSanad.SCode>=1 AND HesabSanad.SCode<=487) p PIVOT
(sum(SSBes) FOR SUBSTRING(SSHCode ,1,8) IN (113,112))as Sink
/LEFT]

محمد سلیم آبادی
یک شنبه 27 تیر 1389, 14:08 عصر
1. بهتر بود از تگ بشکل مناسب استفاده می کردین
2. شما در عبارت جدولی P با کمک SUBSTRING زیر رشته مورد نظر را تولیدکردین و نام مستعار HCode بهش دادین. در نتیجه می تونستین در PIVOT از اون مستقیم استفاده کنین.
3. در IN مربوط به PIVOT اعداد را داخل قلاب قرار بدین.

این را امتحان کنید:

SELECT HCode ,
112 as C112,
113 as C113
FROM
(
SELECT SUBSTRING(SSHCode ,1,8) as HCode ,
SSBes ,
SSBed ,
SYY
FROM [Saroj].[dbo].[HesabSubSanad] INNER JOIN
HesabSanad on HesabSubSanad.SSSCode=HesabSanad.SCode
WHERE SSYY= 1388
AND substring(SSHCode ,9,5)= 112
AND dbo.MiladiToShamsi_10(SDate)>='1388/01/01'
AND dbo.MiladiToShamsi_10(SDate)<='1388/12/29'
AND HesabSanad.SCode>=1 AND HesabSanad.SCode<=487
) p
PIVOT (sum(SSBes) FOR HCode IN ([113],[112]))as Sink