我有一组来自表[MSPWIP]。[MSPWIP]。[Event]的数据,如下所示:
| Createdby | StationName | SerialNumber |
-------------------------------------------------------
| Jay | L1.A1 | 22191321572 |
| Allan | L1.A2 | 22191321572 |
| Nathan | L2.A1 | 22191321579 |
| Jane | L2.A2 | 22191321579 |
我还有其他与问题无关的查询中已经加入的其他数据集
我想创建一个表,其中按L1.A1表示1号线1号站的站将操作员(用createdby表示)分开。目前对我而言,Line不相关
重组后的理想数据应该像这样
| 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
但是对于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 |
我在这里做错了吗?
答案 0 :(得分:1)
您可以通过一次运行来节省时间:
MicrosoftAppPassword
然后将其与所需的表连接起来。
PS:如果SELECT *
FROM (
SELECT
SerialNumber
, MAX(CASE WHEN RIGHT(t.StationName, 2) = '01' THEN t.Operator END) Operator1
, MAX(CASE WHEN RIGHT(t.StationName, 2) = '02' THEN t.Operator END) Operator2
FROM [MSPWIP].[MSPWIP].[Event] t
GROUP BY SerialNumber
) d
中的桩号并非始终是数字,那么您可以使用StationName
而不是SUBSTRING(t.StationName, CHARINDEX('.', t.StationName) + 1, LEN(t.StationName))
来获得桩号(位于圆点后) 。