【发布时间】:2017-05-02 02:20:59
【问题描述】:
我在使用数据透视创建查询时遇到问题。 我有一个有 4 列的表
col1 | col2 | col3 | col4
1 | 1 | 5 | 2
1 | 2 | 6 | 2
1 | 3 | 7 | 2
1 | 4 | 8 | 2
1 | 1 | 5 | 2
1 | 2 | 6 | 2
1 | 3 | 7 | 2
1 | 4 | 8 | 2
我正在使用 pivot,所以我可以输出这样的项目:
col1 | col2 | col3
这是查询:
select col1, "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"
from (
select col1, col2, col3
from tbl
where col4 = 2
)
pivot
(
max(col2)
for col3
in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)
)
代码一直有效,除非我在数据库中有 2 条相同的记录。然后它分组并显示为一个。我想将其输出为 2 个单独但相同的行。我看到的最简单的解决方法是在表中包含另一列作为 ID。但是因为我不会在其他任何地方使用这个 ID,所以我认为这有点毫无意义,而且稍微更改代码会更容易,工作量也更少。
上面的代码输出如下:
1 5 6 7 8 9
我想要这样:
1 5 6 7 8 9
1 5 6 7 8 9
【问题讨论】:
-
你是对的;您将需要一个额外的列来确定数据的子集。这可能只是一个 row_number() 用于将所有行分组为“(col1, col2, col3) 值的第一行,(col1, col2, col3) 值的第二行等”
-
请选择一个 DBMS(Sql Server 或 Oracle),或者您的问题对任何一个都有效?
-
@Boneist 是的,这似乎是最好的主意。