Как составить таблицу по дате - PullRequest
0 голосов
/ 26 октября 2018

Таблица дана как:

    +---------+------+--------+-----------+--------------+
    | Empcode | name | desig  | joinmonth | releivemonth |
    +---------+------+--------+-----------+--------------+
    |      1. | A1.  |    D1. | Jan-18.   |    null      |
    |      2. | A2.  |    D2. | Jan-18.   |    May-18    |
    |      3. | A3.  |    D3. | Jan-18.   |    null      |
    +---------+------+--------+-----------+--------------+

Я хочу показать таблицу как:

    +---------------+--------+--------+--------+--------+--------+
    |    Remarks    | jan-18 | feb-18 | mar-18 | apr-18 | may-18 |
    +---------------+--------+--------+--------+--------+--------+
    | Joinmonth     |      3 |      0 |      0 |      0 |      0 |
    | Releivedmonth |      0 |      0 |      0 |      0 |      1 |
    +---------------+--------+--------+--------+--------+--------+

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вам нужно отключить, а затем повторно развернуть:

select remarks,
       sum(case when mon = 'jan-18' then 1 else 0 end) as jan_18,
       sum(case when mon = 'feb-18' then 1 else 0 end) as feb_18,
       sum(case when mon = 'mar-18' then 1 else 0 end) as mar_18,
       sum(case when mon = 'apr-18' then 1 else 0 end) as apr_18,
       sum(case when mon = 'may-18' then 1 else 0 end) as may_18
from t cross apply
     (values ('Joinmonth', t.Joinmonth), ('Receivedmonth', Receivedmonth)
     ) v(remarks, mon)
group by remarks
0 голосов
/ 26 октября 2018

Это расширенный комментарий, а не ответ, пожалуйста, примите, что я необходимые элементы управления форматированием перед голосованием это.

Вы, кажется, добавили запрос в комментарий, хотя синтаксис был не совсем корректным. Вы часто использовали стандартные скобки () вместо скобок [], и для завершения IN() отсутствовали закрывающие скобки. Я считаю, что ваш запрос должен выглядеть следующим образом:

SELECT
    empname AS remarks
  , [1-1-18]
  , [1-2-18]
  , [1-3-18]
  , [1-4-18]
  , [1-5-18]
FROM (
    SELECT
        empname
      , joimonth
      , releivedmonth
    FROM emply
) AS s
PIVOT (
    COUNT(releivedmonth) 
    FOR joinmonth IN ([1-1-18], [1-2-18], [1-3-18], [1-4-18], [1-5-18])
) piv

Вы не должны пытаться добавлять запросы к комментариям, вместо этого просто отредактируйте вопрос.

В этом запросе вы ссылаетесь на значения, которые выглядят как 1-1-18 , но в выборке данных нет ничего похожего на это вообще. Каким типом данных являются столбцы [joinmonth] и [releivedmonth]?

С данными, которые являются текстом в этих столбцах, у вас есть существенная проблема. Если, например, все они разные: Jan-18., Jan 18, Jan-18, поэтому они не будут выровнены так, как вам нужно. Изменения в данных, подобных этому, сделают это невозможным.

CREATE TABLE emply(
   Empcode      NUMERIC(9,0)
  ,empname         VARCHAR(6)
  ,desig        VARCHAR(8)
  ,joinmonth    varchar(30)
  ,releivemonth varchar(30)
);
INSERT INTO emply(Empcode,empname,desig,joinmonth,releivemonth) VALUES (1.,'A1.','D1.','Jan-18.',NULL);
INSERT INTO emply(Empcode,empname,desig,joinmonth,releivemonth) VALUES (2.,'A2.','D2.','Jan-18.','May 18');
INSERT INTO emply(Empcode,empname,desig,joinmonth,releivemonth) VALUES (3.,'A3.','D3.','Jan-18.',NULL);

SELECT
    empname AS remarks
  , [Jan-18.]
  , [Feb-18.]
  , [Mar-18.]
  , [Apr-18.]
  , [May-18.]
FROM (
    SELECT
        empname
      , joinmonth
      , releivemonth
    FROM emply
) AS s
PIVOT (
    COUNT(releivemonth) 
    FOR joinmonth IN ([Jan-18.], [Feb-18.], [Mar-18.], [Apr-18.], [May-18.])
) piv

Вывод этого однако:

+----+---------+---------+---------+---------+---------+---------+
|    | remarks | Jan-18. | Feb-18. | Mar-18. | Apr-18. | May-18. |
+----+---------+---------+---------+---------+---------+---------+
|  1 | A1.     |       0 |       0 |       0 |       0 |       0 |
|  2 | A2.     |       1 |       0 |       0 |       0 |       0 |
|  3 | A3.     |       0 |       0 |       0 |       0 |       0 |
+----+---------+---------+---------+---------+---------+---------+

Существует только одно ненулевое значение COUNT(releivemonth)

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