ทีนี้พอจะเรียกข้อมูลตาม ตัวอย่าง code ได้แล้ว ติดอยู่เพียงว่า มันต้องเอา store procedure นี้ไปใส่ใน
report viewer ซึ่งพอสร้าง Report1.rdlc แล้วจะดึงข้อมูลจาก ReportDataSet.xsd มันเห็นชื่อของ store procedure
แต่มองไม่เห็น field อะไรเลย ซึ่งทำให้ลากมาวางใน Report1.rdlc ไม่ได้ครับ
เลยเกิดความคิดว่า จะแปลงตัว store procedure นี้เป็น view ธรรมดาได้หรือไม่ครับ
Code (SQL)
DECLARE
@cols AS NVARCHAR(MAX),
@sql AS NVARCHAR(MAX);
-- Construct the column list for the IN clause
SET @cols = STUFF(
(SELECT N',' + QUOTENAME(w) AS [text()]
FROM (SELECT DISTINCT WeekNo AS W FROM dbo.temp) AS W
ORDER BY W
FOR XML PATH('')),
1, 1, N'');
-- Construct the full T-SQL statement
-- and execute dynamically
SET @sql = N'SELECT *
FROM (SELECT ItemNo, WeekNo, Value
FROM dbo.temp) AS I
PIVOT(SUM(Value) FOR WeekNo IN(' + @cols + N')) AS P;';
EXEC sp_executesql @sql;
SELECT *
FROM (SELECT ItemNo, WeekNo, Value
FROM dbo.temp) AS I
PIVOT(SUM(Value) FOR WeekNo IN([1],[2],[3],[4])) AS P
ผมลอง sql ด้านบน ให้ผลลัพธ์แบบเดียวกับ store procedure ครับ
ทีนี้ก็คิดว่า น่าจะใกล้เคียงแล้ว ลองค้นๆ ดู มีคำสั่ง with [nickname] as ( select ....)
แต่ลองแบบนี้แล้วไม่ได้ ติด error converting data type nvarchar to int ตัว wkno
Code (SQL)
with wkno as (select '[1],[2],[3],[4]' as wk)
SELECT *
FROM (SELECT ItemNo, WeekNo, Value
FROM dbo.temp) AS I
PIVOT(SUM(Value) FOR WeekNo IN(wkno)) AS P
ซึ่งถ้า run ผ่าน ผมกะ แทนที่ with wkno as (select '[1],[2],[3],[4]' as wk)
ด้วย
Code (SQL)
with wkno as (select stuff((SELECT N',' + QUOTENAME(w) AS [text()]
FROM (SELECT DISTINCT WeekNo AS W FROM dbo.temp) AS W
FOR XML PATH('')),1, 1, N'') AS wk)