@@ -10961,7 +10961,10 @@ fn parse_pivot_table() {
10961
10961
expected_function("b", Some("t")),
10962
10962
expected_function("c", Some("u")),
10963
10963
],
10964
- value_column: vec![Ident::new("a"), Ident::new("MONTH")],
10964
+ value_column: vec![Expr::CompoundIdentifier(vec![
10965
+ Ident::new("a"),
10966
+ Ident::new("MONTH")
10967
+ ])],
10965
10968
value_source: PivotValueSource::List(vec![
10966
10969
ExprWithAlias {
10967
10970
expr: Expr::value(number("1")),
@@ -11008,6 +11011,75 @@ fn parse_pivot_table() {
11008
11011
verified_stmt(sql_without_table_alias).to_string(),
11009
11012
sql_without_table_alias
11010
11013
);
11014
+
11015
+ let multiple_value_columns_sql = concat!(
11016
+ "SELECT * FROM person ",
11017
+ "PIVOT(",
11018
+ "SUM(age) AS a, AVG(class) AS c ",
11019
+ "FOR (name, age) IN (('John', 30) AS c1, ('Mike', 40) AS c2))",
11020
+ );
11021
+
11022
+ assert_eq!(
11023
+ verified_only_select(multiple_value_columns_sql).from[0].relation,
11024
+ Pivot {
11025
+ table: Box::new(TableFactor::Table {
11026
+ name: ObjectName::from(vec![Ident::new("person")]),
11027
+ alias: None,
11028
+ args: None,
11029
+ with_hints: vec![],
11030
+ version: None,
11031
+ partitions: vec![],
11032
+ with_ordinality: false,
11033
+ json_path: None,
11034
+ sample: None,
11035
+ index_hints: vec![],
11036
+ }),
11037
+ aggregate_functions: vec![
11038
+ ExprWithAlias {
11039
+ expr: call("SUM", [Expr::Identifier(Ident::new("age"))]),
11040
+ alias: Some(Ident::new("a"))
11041
+ },
11042
+ ExprWithAlias {
11043
+ expr: call("AVG", [Expr::Identifier(Ident::new("class"))]),
11044
+ alias: Some(Ident::new("c"))
11045
+ },
11046
+ ],
11047
+ value_column: vec![
11048
+ Expr::Identifier(Ident::new("name")),
11049
+ Expr::Identifier(Ident::new("age")),
11050
+ ],
11051
+ value_source: PivotValueSource::List(vec![
11052
+ ExprWithAlias {
11053
+ expr: Expr::Tuple(vec![
11054
+ Expr::Value(
11055
+ (Value::SingleQuotedString("John".to_string())).with_empty_span()
11056
+ ),
11057
+ Expr::Value(
11058
+ (Value::Number("30".parse().unwrap(), false)).with_empty_span()
11059
+ ),
11060
+ ]),
11061
+ alias: Some(Ident::new("c1"))
11062
+ },
11063
+ ExprWithAlias {
11064
+ expr: Expr::Tuple(vec![
11065
+ Expr::Value(
11066
+ (Value::SingleQuotedString("Mike".to_string())).with_empty_span()
11067
+ ),
11068
+ Expr::Value(
11069
+ (Value::Number("40".parse().unwrap(), false)).with_empty_span()
11070
+ ),
11071
+ ]),
11072
+ alias: Some(Ident::new("c2"))
11073
+ },
11074
+ ]),
11075
+ default_on_null: None,
11076
+ alias: None,
11077
+ }
11078
+ );
11079
+ assert_eq!(
11080
+ verified_stmt(multiple_value_columns_sql).to_string(),
11081
+ multiple_value_columns_sql
11082
+ );
11011
11083
}
11012
11084
11013
11085
#[test]
@@ -11340,7 +11412,7 @@ fn parse_pivot_unpivot_table() {
11340
11412
expr: call("sum", [Expr::Identifier(Ident::new("population"))]),
11341
11413
alias: None
11342
11414
}],
11343
- value_column: vec![Ident::new("year")],
11415
+ value_column: vec![Expr::Identifier( Ident::new("year") )],
11344
11416
value_source: PivotValueSource::List(vec![
11345
11417
ExprWithAlias {
11346
11418
expr: Expr::Value(
0 commit comments