问:有没有办法对单个列进行限定,而忽略最终报告输出中的其余列?
我不得不将此问题转移到仅限Teradata的会议,因为有一个SQL Server解决方案。
我的最终输出格式如下(没有排名限制):
PRODUCT1 STATE1 CITY_A 20
PRODUCT2 STATE1 CITY_A 10
PRODUCT3 STATE1 CITY_A 25
PRODUCT1 STATE1 CITY_B 20
PRODUCT2 STATE1 CITY_B 10
PRODUCT3 STATE1 CITY_B 1
PRODUCT1 STATE2 CITY_C 20
PRODUCT2 STATE2 CITY_C 10
PRODUCT3 STATE2 CITY_C 1
我正在试图解决一个问题,即如何通过动态SQL表达式来生成最高的2个总收益,*整体*。
期望的输出:
PRODUCT1 STATE1 CITY_A 20
PRODUCT2 STATE1 CITY_A 10
PRODUCT1 STATE1 CITY_B 20
PRODUCT2 STATE1 CITY_B 10
PRODUCT1 STATE2 CITY_C 20
PRODUCT2 STATE2 CITY_C 10
产品3不应符合RANKed< = 2 - 如果排名整体,而不是被州和城市打破。
我想看看是否可以在创建最终格式化输出的外部选择级别使用分析函数。
使用Teradata 14.00,因此无法访问DENSE_RANK ......
Mr.ZLK建议使用非OLAP解决方案,该解决方案适用于SQL Server,但不适用于TD,不幸的是:
select * from products sqlMain
where product_id in (1,2,3) /* dynamic pre-condition */
and product_id in
(select top 2 product_id from products t1
where sqlMain.product_id=t1.product_id
group by product_id order by sum(total) desc
)
这将给出PRODUCT1和PRODUCT2
select * from products sqlMain
where product_id in (3) /* another dynamic pre-condition */
and product_id in
(select top 2 product_id from products t1
where sqlMain.product_id=t1.product_id
group by product_id order by sum(total) desc
)
这样可以正确地提供PRODUCT3。
答案 0 :(得分:0)
如果您的Teradata版本高于14.10,则可以在DENSE_RANK
子句中使用QUALIFY
分析函数。
假设您的表格列为product
,state
,city
和gross
,则可能是这样的:
SELECT
product,
state,
city,
gross
FROM (SELECT
product,
state,
city,
gross,
SUM(gross) OVER(PARTITION BY product) AS total
FROM yourTable) t
QUALIFY DENSE_RANK() OVER(ORDER BY total DESC) <= 2
;