目标表字段为row_no,sell_price,buy_price,sell_date,buy_date 原表表字段为row_no,id,price,date,flag, 需求为查询原表,根据id分区,id相同表示为同一笔交易,flag为1时将price放在sell_price中,date放在sell_date中;flag为2时将price放在buy_price中,date放在buy_date中; 意思就是将同一笔交易的两条数据转为一条数据.请写出oracle select查询语句
时间: 2024-03-20 11:39:03 浏览: 22
可以使用Oracle的GROUP BY语句和CASE语句来实现这个转换,以下是查询语句:
```
SELECT
id,
MAX(CASE flag WHEN 1 THEN price ELSE NULL END) AS sell_price,
MAX(CASE flag WHEN 2 THEN price ELSE NULL END) AS buy_price,
MAX(CASE flag WHEN 1 THEN date ELSE NULL END) AS sell_date,
MAX(CASE flag WHEN 2 THEN date ELSE NULL END) AS buy_date
FROM
原表
GROUP BY
id
```
其中,使用GROUP BY语句来将相同id的数据分组,然后使用MAX函数和CASE语句来将相同id的数据转换为一条数据,sell_price和sell_date对应flag为1的数据,buy_price和buy_date对应flag为2的数据。
相关问题
目标表字段为row_no,sell_price,buy_price,sell_date,buy_date 原表表字段为row_no,price,date,flag 需求为查询原表,根据flag分区,flag为1时将price放在sell_price中,date放在sell_date中;flag为2时将price放在buy_price中,date放在buy_date中; 意思就是将同一笔交易的两条数据转为一条数据.请写出oracle select查询语句
可以使用 CASE WHEN 和 JOIN 语句来实现这个需求,具体的 SQL 查询语句如下:
```
SELECT
a.row_no,
CASE WHEN a.flag = 1 THEN a.price END AS sell_price,
CASE WHEN a.flag = 2 THEN a.price END AS buy_price,
CASE WHEN a.flag = 1 THEN a.date END AS sell_date,
CASE WHEN a.flag = 2 THEN a.date END AS buy_date
FROM
original_table a
JOIN original_table b ON a.row_no = b.row_no
WHERE
a.flag = 1
AND b.flag = 2;
```
这个查询语句首先将原表按照 row_no 进行两次自连接(JOIN),然后使用 CASE WHEN 语句根据 flag 的值来将 price 和 date 分别放到对应的目标表字段中。最后通过 WHERE 语句筛选出 flag 分别为 1 和 2 的数据,以实现同一笔交易的两条数据转为一条数据的效果。
目标表字段为row_no,sell_price,buy_price,sell_date,buy_date 原表表字段为row_no,id,price,date,flag, 需求为查询原表,根据id分区,flag为1时将price放在sell_price中,date放在sell_date中;flag为2时将price放在buy_price中,date放在buy_date中; 意思就是将同一笔交易的两条数据转为一条数据.请写出oracle select查询语句
可以使用Oracle的CASE语句来实现这个转换,以下是查询语句:
```
SELECT
row_no,
CASE flag WHEN 1 THEN price ELSE NULL END AS sell_price,
CASE flag WHEN 2 THEN price ELSE NULL END AS buy_price,
CASE flag WHEN 1 THEN date ELSE NULL END AS sell_date,
CASE flag WHEN 2 THEN date ELSE NULL END AS buy_date
FROM
原表
WHERE
id = 'xxx'
```
其中,CASE语句用于根据flag的值来判断将price和date转移到哪个字段中,同时使用WHERE子句来限制查询的分区。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)