檢查下面的查詢其成功運行的SQL Server。
DECLARE @student TABLE(
Student_ID INT,
Course_Name VARCHAR(100),
Total_Average_Grade VARCHAR(100)
)
INSERT INTO @student
select 1, 'Maths ' ,'19.1' union
select 1, 'Physics' ,'0'union
select 1, 'Biology' ,'0'union
select 2, 'Physics' ,'18.5'union
select 2, 'Chemistry' ,'0'union
select 3, 'Maths' ,'19.4'union
select 3, 'Literature' ,'0'union
select 3, 'Physics' ,'0'
;WITH ValList AS(
SELECT Student_ID,Course_Name, Case when Total_Average_Grade like '%,%' then
CAST(LEFT(Total_Average_Grade,PATINDEX('%,%', Total_Average_Grade) - 1) AS float)
else Total_Average_Grade end as
Total_Average_Grade,
RIGHT(Total_Average_Grade,LEN(Total_Average_Grade) - PATINDEX('%,%', Total_Average_Grade)) Remainder
FROM @student
UNION ALL
SELECT Student_ID,Course_Name,
CAST(LEFT(Remainder,CASE WHEN PATINDEX('%,%', Remainder) = 0 THEN LEN(Remainder) ELSE PATINDEX('%,%', Remainder) - 1 END) AS float) Total_Average_Grade,
RIGHT(Remainder,CASE WHEN PATINDEX('%,%', Remainder) = 0 THEN 0 ELSE LEN(Remainder) - PATINDEX('%,%', Remainder) END) Remainder
FROM ValList
WHERE LEN(Remainder) > 0
)
select SS.* from @student SS
join
(
SELECT top 2 v.Student_ID -- use TOP 10 for 10 records
--,s.Course_Name,s.Total_Average_Grade,SUM(v.Total_Average_Grade) as Avg,
,row_number() over(order by SUM(v.Total_Average_Grade) desc) rnk
FROM ValList V
join @student S on s.Student_ID=V.Student_ID and s.Course_Name=V.Course_Name
GROUP BY v.Student_ID
)AA on AA.Student_ID=SS.Student_ID
order by rnk asc,Total_Average_Grade desc
輸出:
添加樣品輸出爲輸入表 –
校驗輸出PLZ。學生1獲得19,4?但在輸入表中它的19,1? –
固定(錯誤由於複製粘貼:)) – rpd