@@ -1090,10 +1090,10 @@ def pivot(
10901090 column : SQL ,
10911091 values : t .List [SQL ],
10921092 alias : bool = True ,
1093- agg : SQL = SQL ("SUM" ),
1094- cmp : SQL = SQL ("=" ),
1095- prefix : SQL = SQL ("" ),
1096- suffix : SQL = SQL ("" ),
1093+ agg : exp . Expression = exp . Literal . string ("SUM" ),
1094+ cmp : exp . Expression = exp . Literal . string ("=" ),
1095+ prefix : exp . Expression = exp . Literal . string ("" ),
1096+ suffix : exp . Expression = exp . Literal . string ("" ),
10971097 then_value : SQL = SQL ("1" ),
10981098 else_value : SQL = SQL ("0" ),
10991099 quote : bool = True ,
@@ -1107,18 +1107,26 @@ def pivot(
11071107 >>> sql = "SELECT date_day, @PIVOT(status, ['cancelled', 'completed']) FROM rides GROUP BY 1"
11081108 >>> MacroEvaluator().transform(parse_one(sql)).sql()
11091109 'SELECT date_day, SUM(CASE WHEN status = \\ 'cancelled\\ ' THEN 1 ELSE 0 END) AS "\\ 'cancelled\\ '", SUM(CASE WHEN status = \\ 'completed\\ ' THEN 1 ELSE 0 END) AS "\\ 'completed\\ '" FROM rides GROUP BY 1'
1110+ >>> sql = "SELECT @PIVOT(a, ['v'], then_value := tv, suffix := '_sfx', quote := FALSE)"
1111+ >>> MacroEvaluator(dialect="bigquery").transform(parse_one(sql)).sql("bigquery")
1112+ "SELECT SUM(CASE WHEN a = 'v' THEN tv ELSE 0 END) AS `v_sfx`"
11101113 """
11111114 aggregates : t .List [exp .Expression ] = []
11121115 for value in values :
1113- proj = f"{ agg } ("
1116+ proj = f"{ agg . name } ("
11141117 if distinct :
11151118 proj += "DISTINCT "
11161119
1117- proj += f"CASE WHEN { column } { cmp } { value } THEN { then_value } ELSE { else_value } END) "
1120+ proj += f"CASE WHEN { column } { cmp . name } { value } THEN { then_value } ELSE { else_value } END) "
11181121 node = evaluator .parse_one (proj )
11191122
11201123 if alias :
1121- node = node .as_ (f"{ prefix } { value } { suffix } " , quoted = quote , copy = False )
1124+ node = node .as_ (
1125+ f"{ prefix .name } { value } { suffix .name } " ,
1126+ quoted = quote ,
1127+ copy = False ,
1128+ dialect = evaluator .dialect ,
1129+ )
11221130
11231131 aggregates .append (node )
11241132
0 commit comments