所以,我有两个表:dataTable
和dataTableColNames
。
dataTable
是这样的:
col1 | col2 | col3 | ... | col9
-----|------|------|-----|-----------
123 | abcd | text | ... | 02/02/2018
... | ... | ... | ... | ...
999 | xyz | text | ... | 31/12/2018
并且有大约30行。
dataTableColNames
是这样的:
colID | colNameEn | colNameRu
------|-----------------|--------------
col1 | "Column 1 Name" | "Колонка 1"
... | ... | ...
col9 | "Column 9 Name" | "Колонка 9"
并且可以包含列名称,甚至包含5个或更多单词。此外,对于相同数据的列标题可能存在不同的翻译。
如何进行SELECT
查询以获得这样的表格?
Column 1 name | ... | Column 9 Name
--------------|-----|--------------
123 | ... | 02/02/2018
PL / SQL Developer v10
这个问题并不完全重复,因为我的表没有entity_id
或任何外键。此外,它是关于列别名,而不是从许多不同的表中查询不同的值。或者是吗?无论如何,我没有在this question的答案中看到我的问题的解决方案。或者也许不明白。如何在我的问题上实现它?
答案 0 :(得分:1)
您可能尝试的解决方案是同时UNION
两个查询,第一个来自dataTableColNames
,第二个来自dataTable
。第一个查询使用一个子查询,该子查询将dataTableColNames
连接到每个列的自身,然后外部查询用于将列名行旋转到列中。第二个查询返回数据。以下查询是未经测试的。您还需要使用sql工具来抑制返回控制台或gui的列名标题(col1, col2, col3
),或者在客户端或中间件中对结果进行后处理。
SELECT col1, col2, col3
FROM (
SELECT c1.col1Name as col1, c2.col2Name as col2, c3.col3Name as col3
FROM dataTableColNames c1
JOIN dataTableColNames c2 on c1.colId = c2.colId
JOIN dataTableColNames c3 on c1.colId = c3.colId
WHERE c1.colId = 'col1'
AND c2.colId = 'col2'
AND c3.colId = 'col3'
) t1
UNION
SELECT col1, col2, col3 from dataTable