Я только что застрял в каком-то SQL-запросе, и я новичок в этом. Я использую в своем запросе сводку.

Это мой запрос SELECT:

SELECT * 
FROM 
    (SELECT lg.domainNameID AS [Domain ID], COUNT(lg.domainNameID) AS [Fix Count]
     FROM tbl_ATT_Request r
     INNER JOIN tbl_ATT_Login lg ON lg.workdayID = r.workdayID
     WHERE r.requestCategoryID = 1 
     GROUP BY lg.domainNameID) slct

И это результат:

Domain | Fix Count
-------+-----------
1        1
2        1
4        2
5        1

И это мой запрос с PIVOT.

SELECT * 
FROM 
    (SELECT lg.domainNameID AS [Domain ID], COUNT(lg.domainNameID) AS [Fix Count]
     FROM tbl_ATT_Request r
     INNER JOIN tbl_ATT_Login lg ON lg.workdayID = r.workdayID
     WHERE r.requestCategoryID = 1 
     GROUP BY lg.domainNameID) slct
PIVOT
    (SUM(slct.[Fix Count])
         FOR slct.[Domain ID] IN ([1],[2],[3],[4],[5])
    ) AS pvt

Это результат:

1 | 2 | 3    | 4 | 5
1   1   NULL   2   1

Теперь моя проблема в том, как заменить значения NULL на 0.

sql
1
Richard Baluyut 10 Фев 2021 в 19:31

1 ответ

Лучший ответ

Просто используйте условную агрегацию:

SELECT SUM(CASE WHEN Domain_Id = 1 THEN Fix_Count ELSE 0 END) as d_1,
       SUM(CASE WHEN Domain_Id = 2 THEN Fix_Count ELSE 0 END) as d_2,
       SUM(CASE WHEN Domain_Id = 3 THEN Fix_Count ELSE 0 END) as d_3,
       SUM(CASE WHEN Domain_Id = 4 THEN Fix_Count ELSE 0 END) as d_4,
       SUM(CASE WHEN Domain_Id = 5 THEN Fix_Count ELSE 0 END) as d_5       
FROM (SELECT lg.domainNameID AS Domain_ID, COUNT(*) AS Fix_Count
      FROM tbl_ATT_Request r JOIN
           tbl_ATT_Login lg
           ON lg.workdayID = r.workdayID
      WHERE r.requestCategoryID = 1
      GROUP BY lg.domainNameID
     ) d
1
Gordon Linoff 10 Фев 2021 в 16:33