Как отложить дату в соответствии с датой

Данная таблица вроде:

    +---------+------+--------+-----------+--------------+
    | 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 |
    +---------------+--------+--------+--------+--------+--------+

какие у вас dbms?

Fahmi 26.10.2018 06:38

Посмотрите на PIVOT или UNPIVOT.

Dai 26.10.2018 06:38

Ядро СУБД Mssql

Karthik Reddy 26.10.2018 06:41

Я пробовал в повороте, но не понимаю

Karthik Reddy 26.10.2018 06:43

ВАЖНО указать, какую базу данных, потому что каждый поставщик базы данных использует свой синтаксис (nb: версия также важна).

Paul Maxwell 26.10.2018 06:47

База данных Microsoft sql 2012

Karthik Reddy 26.10.2018 06:50

Не могли бы вы дать мне ответ в ближайшее время

Karthik Reddy 26.10.2018 07:05
"Я пробовал в повороте, но не понимаю"как спросить начинает с объяснения того, что вам нужно сказать, что вы пробовали в вопросе. Если вы редактировать ответите на вопрос о том, что вы пробовали, и почему это не работает, люди могут помочь вам исправить это. (Это также объясняет, почему важно включать все соответствующие теги - вы можете редактировать вопрос, чтобы изменить теги.)
Richardissimo 26.10.2018 07:44

Выберите empname в качестве примечаний, (1-1-18), (1-2-18), (1-3-18), (1-4-18), (1-5-18) From (выберите empname, joimonth , reivedmonth from emply) как s Pivot (count (reivedmonth) для месяца соединения в ((1-1-18), (1-2-18), (1-3-18), (1-4-18), ( 1-5-18)) стержень

Karthik Reddy 26.10.2018 08:10

пожалуйста, отредактируйте и обновите свой вопрос запросом, который вы пробовали

Squirrel 26.10.2018 08:13
1
10
64
2

Ответы 2

This is an extended comment rather than answer, please accept that I needed formatting controls before down-voting this.

Похоже, вы добавили запрос в комментарий, хотя синтаксис не был полностью правильным. Вы часто использовали стандартные круглые скобки () вместо скобок [], и отсутствовала закрывающая скобка для завершения 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] и [relivedmonth]?

С данными в виде текста в этих столбцах возникает серьезная проблема. Если, например, все они разные: 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)

Оба столбца - varchar

Karthik Reddy 26.10.2018 10:16

это очень жаль .... если бы они были date или datetime, тогда вы могли бы контролировать формат вывода, но с текстом вам снится кошмар.

Paul Maxwell 26.10.2018 10:24

Вам нужно развернуть, а затем снова развернуть:

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

lol "Вам нужно развернуть, а затем снова развернуть:" То, что вы говорите, правда, но вы сделали и то, и другое без использования функций unpivot или pivot.

Paul Maxwell 27.10.2018 00:55

@Used_By_Already. . . Я считаю эти «функции» избыточными и слабыми как функции. Боковые соединения и условное агрегирование намного более гибкие.

Gordon Linoff 27.10.2018 14:56

@Gordon_Linoff Абсолютно согласен, особенно pivot.

Paul Maxwell 27.10.2018 23:41

Другие вопросы по теме