У меня есть набор данных из таблицы [MSPWIP]. [MSPWIP]. [Event], который выглядит следующим образом:
| Createdby | StationName | SerialNumber |
-------------------------------------------------------
| Jay | L1.A1 | 22191321572 |
| Allan | L1.A2 | 22191321572 |
| Nathan | L2.A1 | 22191321579 |
| Jane | L2.A2 | 22191321579 |
И у меня есть другие наборы данных, которые я уже включил в другой запрос, который не имеет отношения к проблеме
Я хочу создать таблицу, разделяющую оператора (обозначается созданным by) станциями, где L1.A1 означает, например, Line 1 Station 1. Для меня на данный момент Линия не актуальна
Мои идеальные данные после реструктуризации должны выглядеть следующим образом
| SerialNumber | Operator1 | Operator2 |
----------------------------------------
| 22191321572 | Jay | Allan |
| 22191321579 | Nathan | Jane |
Я пытался использовать этот код для объединения обеих таблиц:
Запрос # 1
Declare @Operator1 Table(
SerialNumber Varchar(255),
Operator1 Varchar(255)
)
Insert Into @Operator1 (Serialnumber, Operator1)
Select
SerialNumber,
Createdby as Operator1
From [MSPWIP].[MSPWIP].[Event]
where StationName like '%01'
Declare @Operator2 Table(
SerialNumber Varchar(255),
Operator2 Varchar(255)
)
Insert Into @Operator2 (Serialnumber, Operator2)
Select
SerialNumber,
CreatedBy as Operator2
From [MSPWIP].[MSPWIP].[Event]
where StationName like '%02'
select
a.SerialNumber,
CreatedBy,
b.Operator2
From @Operator1 a
join @Operator2 b
On a.SerialNumber = b.SerialNumber
Where a.SerialNumber In ('22191321572', '22191321574')
Тогда я бы хотел присоединиться к этому другому запросу, используя код ниже:
Запрос # 2
join @Operator1 i
on a.SerialNumber = i.SerialNumber
join @Operator2 j
on a.SerialNumber = j.SerialNumber
- Обратите внимание, что a - это другая таблица.
Однако в Query # 1 ему удалось показать только заголовки, а не данные, и это также привело к тому, что Query # 2 также отображал заголовки и ничего больше.
Просто интересно, было ли что-то не так с Query # 1, где данные не удалось вставить в столбцы?
============================================
Обновление:
Используя ответ ниже (с изменениями), я придумал код, подобный этому
Запрос # 3
SELECT Distinct*
FROM (
SELECT distinct
SerialNumber,
Case When t.StationName like '%A1' then CreatedBy End Operator1,
Case When t.StationName like '%A2' then CreatedBy End Operator2
--, Max(CASE WHEN CAST(RIGHT(t.StationName, 1) AS Varchar(255)) = 1 THEN t.CreatedBy END) Operator1
--, Max(CASE WHEN CAST(RIGHT(t.StationName, 1) AS Varchar(255)) = 2 THEN t.CreatedBy END) Operator2
FROM [MSPWIP].[MSPWIP].[Event] t
where t.CreatedDate > '2019-05-30'
Group BY SerialNumber, StationName, Createdby
) d
Однако мои результаты теперь пошатнулись:
| SerialNumber | Operator1 | Operator2 |
----------------------------------------
| 22191321572 | Jay | NULL |
| 22191321572 | NULL | Allan |
| 22191321579 | Nathan | NULL |
| 22191321579 | NULL | Jane |
Я что-то здесь не так сделал?