Соединить две таблицы и объединить одинаковые имена столбцов в одном выражении - PullRequest
0 голосов
/ 21 июня 2019

У меня есть большая таблица необработанных данных. Это долго, и я пытаюсь что-то транспонировать. Я присоединяюсь к двум утверждениям изнутри. Таким образом, я получаю несколько столбцов с одинаковым именем. Это полное внешнее объединение, и я хотел бы, чтобы два отдельных столбца с одинаковым именем были одним столбцом. Поскольку это внешнее объединение, я не хочу выбирать для него только один столбец таблиц, например select t1.c1

Спасибо!

SELECT *
  FROM (SELECT * FROM [LabData].[dbo].[FermHourlyDCSData] where Attribute='Urea') P
  full outer JOIN 
(SELECT * FROM [LabData].[dbo].[FermHourlyDCSData] where Attribute='Water to Mash Total Water') FPD ON 
P.[TimeStamp] = FPD.[TimeStamp] 
and P.Site = FPD.Site
and P.Element = FPD.Element

Фактический:

Site Attribute Timestamp Value Site Attribute Timestamp Value
AD   Urea      1/1/2019  127   Null Null      Null      Null
Null Null      Null      Null  AD   Water     1/1/2019  7.5

Ожидаемый / Желаемая:

Site Attribute Timestamp Value Value
AD   Urea      1/1/2019  127  Null
AD   Water     1/1/2019  Null 7.5

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Попробуйте, это не очень красиво, но работает:

SELECT 
[Site] = ISNULL(P.[Site], FPD.[Site]),  
[Attribute] = ISNULL(P.[Attribute], FPD.[Attribute]),   
[Timestamp] =   ISNULL(P.[Timestamp], FPD.[Timestamp]), 
[Value] =   ISNULL(P.[Value], FPD.[Value]), 
[Element] =ISNULL(P.[Element], FPD.[Element])
FROM (SELECT * FROM [dbo].[FermHourlyDCSData] where Attribute='Urea') P
full outer JOIN 
(SELECT * FROM [dbo].[FermHourlyDCSData] where Attribute='Water to Mash Total Water') FPD ON 
P.[TimeStamp] = FPD.[TimeStamp] 
and P.Site = FPD.Site
and P.Element = FPD.Element
1 голос
/ 21 июня 2019

ISNULL - это то, что вы должны использовать для этого

ISNULL(p.Site,fpd.Site) as [Site]
0 голосов
/ 21 июня 2019

Может быть, я что-то упустил, но вы, кажется, хотите гораздо более простой запрос:

select Site, Attribute, Timestamp,
       (case when Attribute = 'Urea' then Value end) as value_u,
       (case when Attribute = 'Water to Mash Total Water' then Value end) as value_2
from [LabData].[dbo].[FermHourlyDCSData]
where Attribute  in ('Urea', 'Water to Mash Total Water')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...