SELECT * FROM table PIVOT (MAX(TxnDate) FOR TxnTypeName IN ([MoveIn],[MoveStd],[mlxSetCheckCenter]) ) AS T 转成HIvesql
时间: 2024-11-22 16:34:15 浏览: 5
在Hive SQL中,想要实现类似的功能,你需要使用`GROUP BY`和`CASE`语句来模拟PIVOT操作,因为Hive不直接支持`PIVOT`关键字。假设你有一个名为`table`的表,其中包含`TxnDate`和`TxnTypeName`字段,你想按`TxnTypeName`分组并获取每个类型的最大`TxnDate`,你可以这样做:
```sql
SELECT
TxnTypeName,
MAX(CASE WHEN TxnTypeName = 'MoveIn' THEN TxnDate END) AS MoveIn,
MAX(CASE WHEN TxnTypeName = 'MoveStd' THEN TxnDate END) AS MoveStd,
MAX(CASE WHEN TxnTypeName = 'mlxSetCheckCenter' THEN TxnDate END) AS mlxSetCheckCenter
FROM
table
GROUP BY
TxnTypeName;
```
这个查询将返回每个交易类型的名称以及对应的最大交易日期。
相关问题
SELECT * FROM table PIVOT (MAX(TxnDate) FOR TxnTypeName IN ([MoveIn],[MoveStd],[mlxSetCheckCenter]) ) AS T 转成HIVESQL
在Hive SQL中,如果你想将类似SQL查询从MySQL转换,尤其是涉及到`PIVOT`操作,你需要利用`CASE`语句和`GROUP BY`来实现数据重塑。这个查询的大致意思是根据`TxnTypeName`的不同值,对`TxnDate`字段取最大值。Hive SQL的等效语法可能是这样的:
```sql
SELECT
CASE
WHEN TxnTypeName = 'MoveIn' THEN MaxTxnDate
WHEN TxnTypeName = 'MoveStd' THEN MaxTxnDate
WHEN TxnTypeName = 'mlxSetCheckCenter' THEN MaxTxnDate
END AS TransactionType,
[其他需要保留的列]
FROM (
SELECT
TxnTypeName,
MAX(TxnDate) as MaxTxnDate,
-- 其他列...
FROM
table
GROUP BY
TxnTypeName,
-- 如果还有其他分组条件,这里列出它们
) AS subquery
```
在这个查询中,首先对原始表按`TxnTypeName`和可能的其他分组条件进行分组,并计算每个组的最大`TxnDate`。然后外部查询通过`CASE`语句根据`TxnTypeName`选择相应的最大日期。
注意,Hive SQL可能不支持直接的`PIVOT`关键字,所以需要手动编写`CASE`语句。另外,记得检查列名是否适用于你的实际表结构。
阅读全文