我有三个表,其中包含数据,我希望获得使用SQL查询创建的组合概览。第一张表";史诗;具有键值的列和包含键列表的另一列的圆锥。第二个和第三个表包含这些键中每个键的状态。
表格如下所示:
Epics
Key Sub-Tasks
+--------+----------------+
| MCR-1 | MCR-21, MCR-31 |
+--------+----------------+
| MCR-2 | MCR-22, MCR-32 |
+--------+----------------+
| MCR-3 | MCR-23, MCR-33 |
+--------+----------------+
QM Sub-Tasks
Key Status
+--------+-------------+
| MCR-21 | DONE |
+--------+-------------+
| MCR-22 | OPEN |
+--------+-------------+
| MCR-23 | IN PROGRESS |
+--------+-------------+
E3 Sub-Tasks
Key Status
+--------+--------------+
| MCR-31 | NOT RELEVANT |
+--------+--------------+
| MCR-32 | DONE |
+--------+--------------+
| MCR-33 | OPEN |
+--------+--------------+
现在我创建了以下SQL语句:
SELECT epics.'Key' AS 'MCR-Key'
qm.'Status' AS 'QM Status'
e3.'Status' As 'E3 Status'
FROM T3 epics
LEFT JOIN T1 qm ON (qm.'Key' IN epics.'Sub-Tasks')
LEFT JOIN T2 e3 ON (e3.'Key' IN epics.'Sub-Tasks')
然而,通过使用此语句,只有第一行包含表2和表3的状态值,但所有后续行都只包含史诗的密钥:
Output
MCR-Key QM Status E3 Status
+---------+--------------+-----------+
| MCR-1 | NOT RELEVANT | DONE |
+---------+--------------+-----------+
| MCR-2 | | |
+---------+--------------+-----------+
| MCR-3 | | |
+---------+--------------+-----------+
你知道为什么会这样吗?我该如何解决这个问题?
我必须首先从epics.sub-tasks
和左侧部分拆分字符串以与QM sub-tasks
表连接,右侧部分与E3 sub-tasks
表连接。
答案是:
SELECT
e.[Key] 'MCR-Key',
q.[Status] 'QM Status',
e3.[status] 'E3 Status'
FROM Epics e
LEFT JOIN [QM Sub-tasks] Q
ON Q.[Key] = SUBSTRING(e.[sub-tasks], 0, CHARINDEX(',', e.[sub-tasks]))
LEFT JOIN [E3 Sub-tasks] E3
ON E3.[Key] = right(e.[sub-tasks], charindex(',', reverse(e.[sub-tasks])) - 2)
在这里,你可以在DB<gt;小提琴
而且。。。。我必须说更多
永远不要用保留字命名列
并执行NOT在列名中使用连字符(-(