如何将许多(和不同的(单元格从一行合并到具有较少单元格的多行?
在那里我得到了一半的答案,因为在该步骤之后,在关于该数据的合并数据之上有一个表可以连接。 所以现在,例如,有 2 张表,MainTable
和Types
(我从中获取Id
。
并从(MainTable
Name | Date | Type_0 | Mess_0 | Type_1 | Mess_1 | Type_2 | Mess_2
"AD" | 2018-03-02 | "error"| "mess" | "warn" | "mess" | "info" | "mess"
至(MainTable
(:
Name | Date | Type | Mess | TypeId
"AD" | 2018-03-02 | "error"| "mess" | 1
"AD" | 2018-03-02 | "warn" | "mess" | 2
"AD" | 2018-03-02 | "info" | "mess" | 3
用TypeId
从表Types
获得。
Type_X列的名称在Types
中具有Id
和Description
。
最终查询如下所示:
SELECT Name,Date,Type,Mess,T.Id
FROM MainTable
CROSS APPLY
(
SELECT Type = Type_0, Mess = Mess_0, ColName = 'Type_0'
UNION ALL
SELECT Type = Type_1, Mess = Mess_1, ColName = 'Type_1'
UNION ALL
SELECT Type = Type_2, Mess = Mess_2, ColName = 'Type_2'
) TM
INNER JOIN Types T
ON TM.ColName LIKE T.Description + '%'
如果没有最后一个内部连接,我得到了我想要的,但是在最后一个内部连接之后,我得到了最后一个联合的三重副本:
SELECT Type = Type_2, Mess = Mess_2, ColName = 'Type_2'
这会搞砸一切,例如:
Name | Date | Type | Mess | TypeId
"AD" | 2018-03-02 | "error"| "mess" | 1
"AD" | 2018-03-02 | "warn" | "mess" | 2
"AD" | 2018-03-02 | "info" | "mess" | 3
"AD" | 2018-03-02 | "info" | "mess" | 3
"AD" | 2018-03-02 | "info" | "mess" | 3
有人有头绪吗?
附言:可应要求提供Types
表:
Id | Description
1 | 'HVaR_3Y_6M'
2 | 'HVaR_3Y_1Y'
3 | 'HVaR_3Y'
问题显然是HVaR_3Y
是所有三个描述的前缀,因此与其他两个描述不同,它匹配了三次。
也许最后一行在"类型"表中有多个匹配项。如果希望交叉应用(主表和 TM(的结果保持不变,无论"类型"表中的内容如何,请使用左连接:
SELECT Name,Date,Type,Mess,T.Id
FROM MainTable
CROSS APPLY
(
SELECT Type = Type_0, Mess = Mess_0, ColName = 'Type_0'
UNION ALL
SELECT Type = Type_1, Mess = Mess_1, ColName = 'Type_1'
UNION ALL
SELECT Type = Type_2, Mess = Mess_2, ColName = 'Type_2'
) TM
LEFT JOIN Types T
ON TM.ColName LIKE T.Description + '%'