sql - отобразить таблицу рекордов в следующем формате - PullRequest
3 голосов
/ 26 апреля 2011

Вопрос Часть 1

У меня есть таблица ролей, которая определяет уровень и статус каждого кандидата.

name     id     status      level       location     country
==========================================================
RAJ      1      PENDING      MAJOR      BANGALORE     INDIA   
SAM      2      ACTIVE       LEAD       KOLKATA       INDIA
ANN      3      CLOSED       SENIOR     HYDERABAD     INDIA
BEN      4      APPROVED     MINOR      PUNE          INDIA
JACK     5      APPROVED     MINOR      PUNE          INDIA
REC      6      ACTIVE       LEAD       BANGALORE     INDIA
VESPER   7      ACTIVE       LEAD       BANGALORE     INDIA
KISHOR   8      ACTIVE       LEAD       HYDERABAD     INDIA

Мне нужно создать отчет дляколичество кандидатов на каждом уровне и сколько их в отдельном статусе в зависимости от выбранного места и страны.Я не могу объяснить четко.но я надеюсь, что нижеприведенная картинка поможет вам помочь.

status     MINOR   MAJOR   LEAD   SENIOR   Total 
==========================================================
PENDING    0       1       0      0        1
ACTIVE     0       0       4      0        4
CLOSED     0       0       0      1        1  
APPROVED   2       0       0      0        2

Вопрос Часть 2

Как я могу переименовать значения в столбце состояния, которые отображаются послевыполнение вышеуказанного запроса.Предположим, я хочу отобразить статус «Ожидание» как «Отложенный ответ», «Активно» как «Онлайн».

Ответы [ 4 ]

1 голос
/ 26 апреля 2011
;WITH PivotSource AS
(
SELECT id,status,LEVEL
FROM Roles
)
SELECT status,
       MINOR,
       MAJOR,
       LEAD,
       SENIOR,
       MINOR+MAJOR+LEAD+SENIOR AS Total
FROM PivotSource
PIVOT (COUNT(id) FOR LEVEL IN (MINOR,MAJOR,LEAD,SENIOR) ) AS Pvt;
1 голос
/ 26 апреля 2011

Решение без PIVOT:

SELECT
  status,
  MINOR  = COUNT(CASE level WHEN 'MINOR'  THEN 1 END),
  MAJOR  = COUNT(CASE level WHEN 'MAJOR'  THEN 1 END),
  LEAD   = COUNT(CASE level WHEN 'LEAD'   THEN 1 END),
  SENIOR = COUNT(CASE level WHEN 'SENIOR' THEN 1 END),
  Total  = COUNT(*)
FROM Roles
GROUP BY status
0 голосов
/ 11 мая 2011

относительно Вопроса Часть 2:

WITH PivotSource AS ( SELECT id,status,LEVEL FROM Roles ) SELECT 
Status= case Status when 'Pending' then 'Delayed Response'
        when 'Active' then 'online'  
         else 'unknown' End,
MINOR,MAJOR,LEAD, SENIOR,MINOR+MAJOR+LEAD+SENIOR AS Total
FROM PivotSource
PIVOT (COUNT(id) FOR LEVEL IN (MINOR,MAJOR,LEAD,SENIOR) ) AS Pvt; 
0 голосов
/ 26 апреля 2011

Вам нужно использовать сводную таблицу. Вот пример:

http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...