[英]Shifting Rows to columns with no nulls
SELECT
st.suniq,
sd.firstname,
sd.lastname,
tD.testuniq,
- CASE WHEN (td.subtestc)='LI' THEN st.testscore END AS [CELDT Listening],
--CASE WHEN (td.subtestc)='SP' THEN st.testscore END AS [CELDT Speaking],
--CASE WHEN (td.subtestc)='RD' THEN st.testscore END AS [CELDT Reading],
--CASE WHEN (td.subtestc)='WR' THEN st.testscore END AS [CELDT Writing],
--CASE WHEN (td.subtestc)='TO' THEN st.testscore END AS [CELDT Overall],
td.testc,
td.subtestc,
zst.descript,
st.takendt,
st.grdlvl,
st.testscore
FROM dbo.stutests st
JOIN dbo.testdef td ON td.testuniq=st.testuniq
JOIN studemo sd ON sd.suniq=st.suniq
JOIN zsubtest zst ON zst.subtestc=td.subtestc
WHERE tscrtypc='S'
AND td.testc='CELDT'
AND takendt LIKE '%2013%';
結果如下
suniq firstname lastname subtestc descript grdlvl testscore
254585 Brenda Cazares LI CELDT Listening 8 534
254585 Brenda Cazares SP CELDT Speaking 8 612
254585 Brenda Cazares RD CELDT Reading 8 571
254585 Brenda Cazares WR CELDT Writing 8 680
254585 Brenda Cazares WR CELDT overall 8 710
我想返回每人的記錄,沒有空值
suniq firstname lastname Listening Speaking Reading Writing Overall grdlve
254585 Brenda Cazares 534 612 571 680 710 8
當我建立case語句時,它為我提供了null。 我認為我需要組合樞紐和案例陳述。 任何人都有任何建議,並在此先感謝。
SELECT suniq ,
firstname ,
lastname ,
COALESCE([LI], 0) AS Listening ,
COALESCE([SP], 0) AS Speaking ,
COALESCE([RD], 0) AS Reading ,
COALESCE([WR], 0) AS Writing ,
COALESCE([TO], 0) AS Overall ,
st.grdlvl
FROM ( SELECT st.suniq ,
sd.firstname ,
sd.lastname ,
tD.testuniq ,
td.subtestc ,
td.testc ,
td.subtestc ,
zst.descript ,
st.takendt ,
st.grdlvl ,
st.testscore
FROM dbo.stutests st
JOIN dbo.testdef td ON td.testuniq = st.testuniq
JOIN studemo sd ON sd.suniq = st.suniq
JOIN zsubtest zst ON zst.subtestc = td.subtestc
WHERE tscrtypc = 'S'
AND td.testc = 'CELDT'
AND takendt LIKE '%2013%'
) T PIVOT ( SUM(testscore) FOR [subtestc] IN ( [LI], [SP], [RD], [WR],
[TO] ) ) AS Pvt
您幾乎就在那里,只需要將case statement
包裝在Max aggregate
SELECT st.suniq,
sd.firstname,
sd.lastname,
Max(CASE WHEN td.subtestc = 'LI' THEN st.testscore END) AS [Listening],
Max(CASE WHEN td.subtestc = 'SP' THEN st.testscore END) AS [Speaking],
Max(CASE WHEN td.subtestc = 'RD' THEN st.testscore END) AS [Reading],
Max(CASE WHEN td.subtestc = 'WR' THEN st.testscore END) AS [Writing],
Max(CASE WHEN td.subtestc = 'TO' THEN st.testscore END) AS [Overall],
st.grdlvl,
FROM dbo.stutests st
JOIN dbo.testdef td
ON td.testuniq = st.testuniq
JOIN studemo sd
ON sd.suniq = st.suniq
JOIN zsubtest zst
ON zst.subtestc = td.subtestc
WHERE tscrtypc = 'S'
AND td.testc = 'CELDT'
AND takendt LIKE '%2013%'
GROUP BY st.suniq,
sd.firstname,
sd.lastname,
st.grdlvl
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.