SQL Server: объединять только даты без ссылки - PullRequest
3 голосов
/ 22 марта 2019

У меня есть такие данные, как

Таблица 1: (после преобразования данных в нужный мне формат с помощью приведенного ниже запроса далее в этом вопросе после левого соединения)

Изначально содержит информацию о билетах, такую ​​как дата, номер билета, тип билета.

Monthyear   Premiumold   Silverold
-----------------------------------
Jan 2019      233           156
Feb 2019      344           258
Mar 2019      222           298

Таблица 2: которую я предсказал и выдвинул из другого источника в том же формате

Monthyear   Premium   silver
----------------------------
Apr 2019     284       312
May 2019     267       344 
Jun 2019     223       356
Jul 2019     244       367
Aug 2019     234       373

Я хочу получить эти данные в таком формате, как:

Monthyear   Premiumold   Silverold      Premium   silver
---------------------------------------------------------
    Jan2019      233           156       NULL      NULL     
    Feb 2019     344           258       NULL      NULL
    Mar 2019     222           298       NULL      NULL
    Apr 2019    NULL           NULL      284       312
    May 2019    NULL           NULL      267       344 
    Jun 2019    NULL           NULL      223       356
    Jul 2019    NULL           NULL      244       367
    Aug 2019    NULL           NULL      234       373

, который в основном собирает месяцы и пропускает NULL там, где нет данных.

Я пытался:

select * 
from 
    ((select Monthyear, Premium, Silver 
      from [dbo].[Predicted]) c
      left join 
         (select 
              case when (tickettype = 'Premium') 
                   then count(number) 
              end as Premiumold,
              case when (tickettype = 'Silver') 
                   then count(number) 
              end as Silverold,
              concat(convert(char(3), a.date, 0), ' ', year(a.date)) as Monthyear 
          from 
              openquery(SNOW, 'select number,date, ticket_type from ticketdata 
where date between ''2019-01-01 00:00:00'' and ''2019-02-28 23:59:59''')a
group by concat(convert(char(3), a.sys_created_on, 0),' ',year(a.date)),tickettype) as b
on c.Monthyear = b.Monthyear)

Это, очевидно, не возвращает то, что я хочу.

Пожалуйста, помогите мне с этим.

Ой!

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

Попробуйте это.

select ISNULL(a.monthyear,b.monthyear),a.Premiumold,silverold,Premium,silver from Table1 a 
full join Table2 b on a.monthyear=b.MonthYear
2 голосов
/ 22 марта 2019

использовать объединение всех

select Monthyear,Premiumold,Silverold, null as Premium, null as silver
from tabl1
union all
select Monthyear,null,null,Premium,silver from tabl2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...