Sql 在单行的不同列中获取不同的行值
我的桌子看起来像这样:Sql 在单行的不同列中获取不同的行值,sql,oracle,Sql,Oracle,我的桌子看起来像这样: Param_id Param_value ------------------------ A 1 B 2 C 3 D 4 。。。。等等现在我只需要Param_id“A”和“B”的值 现在我想在两个不同的列中获得param_值,而不是在两个不同的行中。但是如果我在子句中使用,它将返回两行结果。 我想要像下面这样的东西: Param_value_1 Para
Param_id Param_value
------------------------
A 1
B 2
C 3
D 4
。。。。等等现在我只需要Param_id“A”和“B”的值
现在我想在两个不同的列中获得param_值,而不是在两个不同的行中。但是如果我在子句中使用,它将返回两行结果。
我想要像下面这样的东西:
Param_value_1 Param_value_2
---------------------------------
1 2
我不能使用listag
或pivot
,因为它们不符合我的目的。有没有其他方法可以做到这一点?我在谷歌上搜索过,但找不到任何解决方案。传统的旋转方式。。。由于您正在('A','B')
中查找parameter_id的参数值,因此将结果列命名为param_value_1
和param_value_2
没有多大意义;为什么不参数值a
和参数值b
?(否则,是什么决定了'A'
是1
,'B'
是2
,而不是相反?)
因此-回到旧的数据透视方式(尽管我怀疑无论要求如何,PIVOT
也会起作用-除非您使用的是Oracle 10或更低版本):
表中只有这些行吗?没有,还有很多行,这只是一个示例。然后显示更多数据。如果没有显示适当的数据,您所要求的是微不足道的。您可以尝试以下链接:所选答案的透视解决方案以外的解决方案:不清楚。。。参数值1与参数值2的区别是什么?这与第一列中的值(A,B)有什么关系?如果您有更多的行,您希望结果是什么,一行多列?多少列-100?1000? 一百万?更多?使用此构造时存在问题,因为我们使用的产品不支持使用这种SQL查询。还有其他办法吗?我们使用的是Oracle 11.2,您告诉pivot,我们如何使用pivot实现这一点?因为据我所知,pivot只能使用聚合函数,并且可以为每个参数\u id提供例如计数,但不能为参数\u值提供计数。@Mistu4u哪个产品不支持MAX
和CASE
语句?对于pivot,也可以只使用MAX
,而不使用COUNT
。参数id在('A'作为参数值_1,'B'作为参数值_2)中为PIVOT(最大值(参数值))
@PhamX.Bach,这不是关于MAX或CASE,而是关于这个答案中使用的这个特定构造。我将检查使用MAX-though和PIVOT。PIVOT
确实是一个聚合操作(我上面提供的解决方案也是如此)但是:如果param_id='A'
在您的表中只出现一次,您认为MAX(param_值)是什么
在param_id='A'
所在的行上?您是否尝试过使用PIVOT
的SQL解决方案,但它不起作用,或者您只是假设它不起作用?尝试一下,您会看到它起作用了!您使用的是什么产品?以及“种类”是什么我的解决方案所属的SQL中,您的产品不支持的部分?不支持的部分有哪些?
select max(case when param_id = 'A' then param_value end) as param_value_a,
max(case when param_id = 'B' then param_value end) as param_value_b
from your_table;