下面是我的SQL,如下所示。我想将观测 Jmeter 旋转到不同的列中。由于OBSERVATION是文本字段,因此如果我写MIN(OBSERVATION),它将返回null。
with x as (select '1000257' as ASSET_NUMBER,'GOOD' AS OBSERVATION,'CBMO_ASSESSMENT' AS METER_NAME from dual
UNION ALL
SELECT '1010257' AS ASSET_NUMBER,'BAD' AS OBSERVATION, 'SF6B_ASSESSMENT' as METER_NAME from dual
)
select METER_NAME_1_OBSERVATION,METER_NAME_2_OBSERVATION from x
PIVOT(
MIN(OBSERVATION) AS OBSERVATION
for METER_NAME in
(
'CBMO_ASSESSMENT' AS METER_NAME_1 , 'SF6B_ASSESSMENT' AS METER_NAME_2
)
)
字符串
enter image description here
我想要的输出如下所示enter image description here
我怎么能做到这一点,因为我不能在文本字段上旋转最小值(观察)。
我希望这是添加在1行,而不是2行作为相同的资产。我希望这只显示在1行而不是2行。
感谢您在下面的帮助。
谨致问候,
我想将文本字段透视到不同的列中,但返回为空记录。我怎么能做到这一点,先生,因为它是返回一个空记录。
感谢你的帮助,先生。
2条答案
按热度按时间fd3cxomn1#
您可以检查添加了
PROJECTION
信息的执行计划,这将显示数据库在每个步骤中请求了哪些表达式。个字符
正如您所看到的,
HASH GROUP BY
操作(计划行= 1)请求三个表达式:一个常规列和两个PIVOT
艾德列(这也显示了如何在没有PIVOT
的情况下执行此操作)。"X"."ASSET_NUMBER"
个MIN(CASE WHEN (INTERNAL_FUNCTION("METER_NAME")='CBMO_ASSESSMENT') THEN "OBSERVATION" END)
个MIN(CASE WHEN (INTERNAL_FUNCTION("METER_NAME")='SF6B_ASSESSMENT') THEN "OBSERVATION" END)
个ASSET_NUMBER
列对于这两行是不同的,但是只要它没有被投影,输出就可能会混淆。然而,这是有记录的:相反,
pivot_clause
执行隐式GROUP BY
。隐式分组基于pivot_clause
中未引用的所有列沿着pivot_in_clause
中指定的一组值。为了得到你想要的,你可以:
PIVOT
的输入列,只保留必需的列。型
aggregate_function(CASE WHEN pivot_in_col = 'EXPR' THEN pivot_for_col END)
使用显式GROUP BY
手动构建PIVOT
表达式。型
对于您的示例数据,两者都将返回相同的结果:
| METER_NAME_2_观察| METER_NAME_2_OBSERVATION |
| --| ------------ |
| 坏| BAD |
fiddle
cig3rfwq2#
这是因为
ASSET_NUMBER
的值不同(1000257和1010257)。如果它们是一样的,你就会得到你想要的:
字符串
另一个选项(条件聚合):
型