Oracle SQL:Select中的Case会覆盖值而不是添加它们

时间:2017-06-21 12:22:05

标签: sql oracle select case partition

我是Oracle新手,也许在这里使用错误的方法。

当前结果:

enter image description here

预期结果:

enter image description here

问题在于,在我的情况下,每个ID而不是在其上方的文本“Items”而不是第一个项

我的查询(简化):

SELECT
    CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY sd.ID ORDER BY sd.ITEM) = 1 THEN sd.ID
        ELSE '' 
    END AS ID
    , CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY sd.ID ORDER BY sd.ITEM) = 1 THEN 'Items'
        ELSE sd.ITEM
    END AS Details
    , CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY sd.ID ORDER BY sd.ITEM) = 1 THEN TO_CHAR((sd.SUBTOTAL + sd.SUBTOTAL_TAX), 'FM9,990.00')
        ELSE '' 
    END AS Total_Price
FROM
    SHIP_DETAILS sd
/* ... */ 

注意:上面屏幕截图中的总价格只是占位符来解释内容,它只是一笔金额。

有人能告诉我这里做错了什么吗?

非常感谢您的任何帮助,
麦克

1 个答案:

答案 0 :(得分:1)

评论太长了。

case语句不会生成行。因此,您可以选择'item'或第一项。

我怀疑您要使用grouping sets(或with rollup)。这是解释这些group by修饰符的article