我有一个数据库,如图所示。让我们用下面的数据为例:
工单表:
WONUM (PK) | WORKTYPE | STATUS | DESCRIPTION
1234 URGENT OPEN Inv. work X.
FAILUREREPORT表:
FAILUREREPORTID (PK) | WONUM | FAILURECODE | ASSETNUM | TYPE
5678 1234 SYMPT1347 DT-JA-123 Problem
5679 1234 WA4521 DT-JA-123 Cause
5680 1234 SOL1672 DT-JA-123 Solution
失败代码表:
FAILURECODEID (PK) | FAILURECODE | DESCRIPTION
345 SYMPT1347 Symptom X.
346 WA4521 Cause Y.
347 SOL1672 Solution Z.
我有以下查询,这不会工作中途:
SELECT F.WONUM, W.DESCRIPTION AS WO_DESC, W.STATUS, F.ASSETNUM, F.TYPE, C.DESCRIPTION AS FCODE_DESC
FROM WORKORDER W
INNER JOIN FAILUREREPORT F ON F.WONUM = W.WONUM
INNER JOIN FAILURECODE C ON F.FAILURECODE = C.FAILURECODE
WHERE W.WORKTYPE = 'URGENT' AND W.STATUS <> 'CANCELLED'
ORDER BY F.WONUM ASC, F.TYPE ASC
它返回:
WONUM | WO_DESC | STATUS | ASSETNUM | TYPE | FCODE_DESC
1234 Inv. work X. OPEN DT-JA-123 PROBLEM Symptom X.
1234 Inv. work X. OPEN DT-JA-123 CAUSE Cause Y.
1234 Inv. work X. OPEN DT-JA-123 SOLUTION Solution Z.
然而,不是3行,我想有症状,原因和解决方案列在一行,如下所示:
WONUM | WO_DESC | STATUS | ASSETNUM | PROBLEM | CAUSE | SOLUTION
1234 Inv. work X. OPEN DT-JA-123 Symptom X. Cause Y. Solution Z.
如何使用pivot函数将行转换为列(如果可能的话)?我也接受任何其他解决方案,导致预期的结果。 我操作的数据库是Oracle DB,而我的操场/测试环境是MySQL。我知道这个pivot不能在MySQL中使用,但是通过聚合和分组可以解决这个问题。
更正的种种顾虑。 –
您仍然需要将'MIN(CASE WHEN TYPE ='PROBLEM'THEN C.DESCRIPTION)as PROBLEM END'改为MIN(CASE WHEN TYPE ='PROBLEM'THES C.DESCRIPTION END)as problem“。 – markusk
此外,MySQL要求你编写'MIN(...)'而不是'MIN(...)'(MIN和'(')之间不允许有空格,并且'AS WO_DESC'必须从'GROUP BY'条款 – markusk