select ri.rate_item, ri.rate_level_name, ri.rate_level_value from cost_rating_item ri where ri.rate_type=1 order by ri.rate_item,ri.rate_level_value desc group by rate_item 行转列
时间: 2024-04-14 14:31:03 浏览: 48
[Oracle] dbms_metadata.get_ddl 的使用方法总结
在您的查询中,使用了`GROUP BY`子句和`ORDER BY`子句。但是,行转列操作需要使用聚合函数和`PIVOT`函数,因此需要进行一些修改。以下是修改后的查询:
```sql
SELECT rate_item,
MAX(CASE WHEN rate_level_name = 'Level 1' THEN rate_level_value END) AS Level_1,
MAX(CASE WHEN rate_level_name = 'Level 2' THEN rate_level_value END) AS Level_2,
MAX(CASE WHEN rate_level_name = 'Level 3' THEN rate_level_value END) AS Level_3
FROM cost_rating_item
WHERE rate_type = 1
GROUP BY rate_item
ORDER BY rate_item;
```
在上面的查询中,使用了`CASE`语句将每个`rate_level_name`的值转换为对应的列。然后使用`MAX`聚合函数获取每个列的最大值。最后,使用`GROUP BY`子句按`rate_item`进行分组,并使用`ORDER BY`子句按`rate_item`进行排序。
请注意,您需要根据实际的`rate_level_name`值进行调整。此外,如果有更多的`rate_level_name`值,您可以继续添加更多的`MAX(CASE ...)`表达式来转换为相应的列。
阅读全文