我需要以下查詢的幫助。'在'Matrix中使用SQL
我有4個表:
+------------+------------+--------------+-----------------+
| project | motor | component | motor_component |
+------------+------------+--------------+-----------------+
| project_id | motor_id | component_id | mc_id |
| name | project_id | name | motor_id |
| | name | | component_id |
+------------+------------+--------------+-----------------+
我需要創建查詢返回矩陣「成分爲電機X使用」:
+----------------+---------+---------+---------+-----+---------+
| component.name | MOTOR 1 | MOTOR 2 | MOTOR 3 | ... | MOTOR X |
+----------------+---------+---------+---------+-----+---------+
| Flange | 1 | | | | |
| Shaft | | 1 | | | |
+----------------+---------+---------+---------+-----+---------+
行,我需要在列組件的名稱,1 MOTOR *此組件在該specific項目的電機中時(只有一個項目在查詢中)。
我有查詢返回結果爲靜motor_id和電機的靜態數量(和靜PROJECT_ID,但這不是問題。):
SELECT c.name
,CASE WHEN EXISTS (SELECT i.name
FROM component i
JOIN motor_component_ i_mc
ON i.component_id = i_mc.component_id
WHERE i.component_id = c.component_id
AND i_mc.id_motor = 7
)
THEN '1'
ELSE NULL
END AS 'MOTOR 1'
,CASE WHEN EXISTS (SELECT i.name
FROM component i
JOIN motor_component_ i_mc
ON i.component_id = i_mc.component_id
WHERE i.component_id = c.component_id
AND i_mc.id_motor = 12
)
THEN '1'
ELSE NULL
END AS 'MOTOR 2'
FROM component c
JOIN motor_component mc
ON c.component_id = mc.component_id
JOIN motor m
ON mc.motor_id = m.motor_id
JOIN project p
ON m.project_id = p.project_id
WHERE p.project_id = 30
我不知道如何創建一個動態查詢未知的電機數量和未知的motor_ids 我不知道它畢竟可能。
您正在使用什麼應用程序來報告這些數據? – iamdave
如果可能,我會建議在您的表示層中進行這種轉換。我明白這並不總是一種選擇。組件數量是否有安全上限? –
您可以使用'PIVOT'旋轉數據,但電機的數量必須固定。你不能寫任意數量的列的SQL查詢 –