mysql - 如何在具有不同参数和别名的列中执行 SELECT?
问题描述
我想从这个表中创建一个报告。我需要从同一列中的不同参数获取数据。
ID_NUMBER ID_DOCUMENT DOCUMENT_NAME
A001 1 DOC_A_1
A001 2 DOC_A_2
A001 3 DOC_A_3
B001 1 DOC_B_1
B001 3 DOC_B_3
SELECT 参数为 1 和 2
然后,SELECT 输出应该是:
ID_NUMBER DOCUMENT_1 DOCUMENT_2
A001 DOC_A_1 DOC_A_2
B001 DOC_B_1 NULL
我当前的查询:
SELECT
tdoc_1.ID_NUMBER,
tdoc_1.DOCUMENT_NAME AS "DOCUMENT_1"
FROM `document` 'tdoc_1'
LEFT OUTER JOIN (
SELECT
tdoc_1.ID_NUMBER,
tdoc_2.DOCUMENT_NAME AS "DOCUMENT_2"
FROM `document` 'tdoc_2'
WHERE `ID_DOCUMENT` = '2'
) temp_doc ON tdoc_1.ID_NUMBER = temp_doc.ID_NUMBER
WHERE ID_NUMBER = 1
列中的数据很大,所以,最好有一个快速查询
解决方案
您只需要在此处进行一些带有旋转逻辑的聚合:
SELECT
ID_NUMBER,
MAX(CASE WHEN ID_DOCUMENT = 1 THEN DOCUMENT_NAME END) AS DOCUMENT_1,
MAX(CASE WHEN ID_DOCUMENT = 2 THEN DOCUMENT_NAME END) AS DOCUMENT_2
FROM document
GROUP BY
ID_DOCUMENT
ORDER BY
ID_DOCUMENT;
如果您希望文档列灵活,那么您将需要一些动态 SQL。它不能被硬编码。
推荐阅读
- java - 在 Java Spring Web MVC 中加密/解密查询字符串参数的最佳方法是什么?
- c - 全局变量未按预期运行
- react-native - 如何拥有像数字输入 onChangeText 这样的 atm
- c# - Blazor 组件文件中的依赖注入
- c++ - 如何在 C++ 中返回结构?
- r - 如何使用 pipe/dplyr 为数据帧上的算术运算编写可读代码?
- html - 多个文本更改动画不起作用
- kubernetes - 多少cpu需要istio-pilot?
- java - 如何找到任意数量的 ArrayLists 的笛卡尔积 - Java
- python - 嵌套while循环中不需要的输出