[英]How to output SQL Database in a specific format based on the ROWID
我试图尝试的是从数据库中选择信息,并按ROWID将其分组并输出。
我的表结构
CREATE TABLE PROJECT_RECORDS (
RECORDS_ROWID number(3) not null,
RECORDS_LISTCOLUMNID number (3) not null,
RECORDS_RECORDVALUE varchar2 (25)
);
样本数据
RECORDS_ROWID RECORDS_LISTCOLUMNID RECORDS_RECORDVALUE
1 1 First Row
1 2 First Row Description
1 3 First Row Date
2 1 Second Row
2 2 Second Row Description
2 3 Second Row Date
3 1 Third Row
3 2 Third Row Description
3 3 Third Row Date
我希望它如何显示
- First Row - First Row Description - First Row Data
- Second Row - Second Row Description - Second Row Date
- Third Row - Third Row Description - Third Row Date
任何帮助将不胜感激
可以做到这一点,尽管它并不优雅并且具有硬编码的值,但这是一个起点!
它在MS SQL中,但是在方言方面并没有什么异常。
您可以在这里使用它: http : //sqlfiddle.com/#!3/d4875/9
SELECT
(SELECT RECORDS_RECORDVALUE FROM PROJECT_RECORDS pr2
WHERE pr2.RECORDS_LISTCOLUMNID=1
AND pr1.RECORDS_ROWID=pr2.RECORDS_ROWID
) AS col1,
(SELECT RECORDS_RECORDVALUE FROM PROJECT_RECORDS pr2
WHERE pr2.RECORDS_LISTCOLUMNID=2
AND pr1.RECORDS_ROWID=pr2.RECORDS_ROWID
) AS col2,
(SELECT RECORDS_RECORDVALUE FROM PROJECT_RECORDS pr2
WHERE pr2.RECORDS_LISTCOLUMNID=3
AND pr1.RECORDS_ROWID=pr2.RECORDS_ROWID
) AS col3
FROM
PROJECT_RECORDS pr1
GROUP BY RECORDS_ROWID
比AjV更快一点的解决方案
SELECT
MAX(CASE WHEN RECORDS_LISTCOLUMNID = 1
THEN RECORDS_RECORDVALUE
ELSE '' END) AS col1,
MAX(CASE WHEN RECORDS_LISTCOLUMNID = 2
THEN RECORDS_RECORDVALUE
ELSE '' END) AS col2,
MAX(CASE WHEN RECORDS_LISTCOLUMNID = 3
THEN RECORDS_RECORDVALUE
ELSE '' END) AS col3
FROM PROJECT_RECORDS
GROUP BY RECORDS_ROWID
结果:
| COL1 | COL2 | COL3 |
|------------|------------------------|-----------------|
| First Row | First Row Description | First Row Date |
| Second Row | Second Row Description | Second Row Date |
| Third Row | Third Row Description | Third Row Date |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.