簡體   English   中英

將行移動到無空列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM