[英]Pivot table with dynamic columns
我無法使用以下表在MySQL中創建數據透視表:
Teams
-------------
id | name
1 | teamA
2 | teamB
Processes
-------------
id | name
1 | processA
2 | processB
3 | processC
ProcessDetails
---------------
id | processId | keyName
1 | 1 | shape
2 | 1 | vegetable
3 | 1 | fruit
4 | 2 | animal
5 | 3 | dessert
TeamProcesses
-----------------
id | teamId | processId
5 | 1 | 1
6 | 1 | 2
7 | 2 | 3
TeamProcessDetails
--------------------
id | teamProcessId | proccessDetailsId | value
1 | 5 | 1 | circle
2 | 5 | 2 | carrot
3 | 5 | 3 | apple
4 | 6 | 4 | dog
5 | 7 | 5 | chocolate
我嘗試生成的數據透視表應僅包含給定團隊的流程詳細信息。
例
對於團隊A:
Pivot Table
------------
teamId | processId | shape | vegetable | fruit | animal
1 | 1 | circle | carrot | apple | NULL
1 | 2 | NULL | NULL | NULL | dog
對於團隊B:
teamId | processId | dessert
2 | 3 | chocolate
謝謝!
使用上一個問題的查詢,您應該能夠更改代碼以添加WHERE子句,該子句將過濾每個團隊的數據:
SET @sql = NULL;
set @team = 'teamA';
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when pd.keyname = ''',
keyname,
''' then tpd.value end) AS ',
replace(keyname, ' ', '')
)
) INTO @sql
from ProcessDetails
where processId in (select tp.processId
from teams t
inner join teamprocesses tp
on t.id = tp.teamid
where t.name = @team);
SET @sql
= CONCAT('SELECT t.id teamid,
t.name teamname,
p.id processid, ', @sql, '
from teams t
inner join teamprocesses tp
on t.id = tp.teamid
inner join TeamProcessDetails tpd
on tp.id = tpd.teamProcessId
inner join processes p
on tp.processid = p.id
inner join processdetails pd
on p.id = pd.processid
and tpd.processDetailsid = pd.id
where t.name = ''', @team, '''
group by t.id, t.name, p.id, p.name;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.