我有一个这样订购的数据库:
ID | Subject | Value
---------------------------------------------
1 Subj1 Val1
1 Subj2 Val2
2 Subj1 Val3
2 Subj5 Val4
Run Code Online (Sandbox Code Playgroud)
等等。ID 数以千计,受试者数以万计。
我想找到这个矩阵的转置。我怎么做?
如果主题是一个小的静态集,那么我可以使用 CASE 语句,如以下解决方案所示:SQLITE - transpose rows into columnsproperly,但在我的情况下,主题是一个大的动态集,所以 CASE 将无法工作,除非我正在数据库外部的某些应用程序中动态构建 SQL。就我而言,没有“应用程序”;正如我在下面的评论中提到的,我正在寻找一个纯 SQL 解决方案。
问题是:我正在使用 SQLite,它缺少 PIVOT 语句,这将使这变得更容易。我不知道是否还有办法做到这一点,并且没有学到太多过去的连接类型。对于较小的数据库,我会尝试一系列左连接,但由于结果中有很多列值,我不知道如何操作。
如何转换成这种形式?
ID | Subj1 | Subj2 | Subj3 | etc.
--------------------------------------------------------------------
1 Val1 Val2 0
2 Val3 0 0
Run Code Online (Sandbox Code Playgroud)
您可以使用条件聚合来旋转数据:
select id,
max(case when Subject = 'Subj1' then Value end) as Subj1,
max(case when Subject = 'Subj2' then Value end) as Subj2,
max(case when Subject = 'Subj3' then Value end) as Subj3,
. . .
from your_table
group by id;
Run Code Online (Sandbox Code Playgroud)
这里注意,如果有多行具有相同的 id 和相同的主题,则只会返回 id 最大值的一行。
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |