我需要创建一个简化的报告,列出我销售的所有来源,并将其分解为杂项。
我之所以说简化,是因为我试图将一些东西组合在一起,这意味着所有动物销售应该被标记为寄宿费。
到目前为止我的查询:
SELECT
CASE
WHEN aoi.is_animal = 'N' THEN TO_CHAR(aot.name)
ELSE 'Boarding Charges'
END AS display_name,
aoi.is_animal,
CASE
WHEN aot.name = 'Misc.' THEN 'Y'
ELSE 'N'
END AS show_details,
SUM(aoi.quantity * aoi.unit_price) as total
FROM ANIMAL_ORDER ao
LEFT JOIN ANIMAL_ORDER_ITEM aoi ON aoi.order_id = ao.id
LEFT JOIN ANIMAL_ORDER_TYPE aot ON aot.id = aoi.order_type_id
WHERE ao.order_stage != 'CANCELLED'
GROUP BY
aot.name,
CASE
WHEN aoi.is_animal = 'N' THEN 0
ELSE 1
END, aoi.is_animal
我现在试图让这个变得简单,所以我并不担心Misc.
的东西 - 我刚刚添加了一个列来说明Y
或{{1暂时。
上面的查询结果如下:
N
正如您所看到的寄宿费用没有组合在一起,我明白原因是什么 - 我在# Resulting table
DISPLAY_NAME IS_ANIMAL SHOW_DETAILS TOTALS
-------------------------------------------------------------
Boarding Charges Y N 8039.53
Truck Delivery Fee N N 1005.21
Misc. N Y 237.16
Cancellation Fee N N 45.00
Late Fee N N 410.25
Courier Fee N N 1338.40
Boarding Charges Y N 311.27
Boarding Charges Y N 7341.19
条款中有aot.name
。它出现的唯一原因是因为当我尝试删除它时,我在GROUP BY
上收到错误,说它不是TO_CHAR(aot.name)
表达式。
我只是希望将所有寄宿费用组合在一起并总结其总数。
我试图使用this question中提到的方法。
答案 0 :(得分:2)
如果您想通过display_name分组,则应在
组中重复相同的条件 SELECT
CASE
WHEN aoi.is_animal = 'N' THEN TO_CHAR(aot.name)
ELSE 'Boarding Charges'
END AS display_name,
aoi.is_animal,
CASE
WHEN aot.name = 'Misc.' THEN 'Y'
ELSE 'N'
END AS show_details,
SUM(aoi.quantity * aoi.unit_price) as total
FROM ANIMAL_ORDER ao
LEFT JOIN ANIMAL_ORDER_ITEM aoi ON aoi.order_id = ao.id
LEFT JOIN ANIMAL_ORDER_TYPE aot ON aot.id = aoi.order_type_id
WHERE ao.order_stage != 'CANCELLED'
GROUP BY
CASE
WHEN aoi.is_animal = 'N' THEN TO_CHAR(aot.name)
ELSE 'Boarding Charges'
END ,
aoi.is_animal,
CASE
WHEN aot.name = 'Misc.' THEN 'Y'
ELSE 'N'
END
答案 1 :(得分:1)
我认为这会做你想做的事情:
SELECT (CASE WHEN aoi.is_animal = 'N' THEN TO_CHAR(aot.name)
ELSE 'Boarding Charges'
END) AS display_name,
(CASE WHEN aoi.is_animal = 'N' THEN aoi.is_animal END) as is_animal,
(CASE WHEN aoi.is_animal <> 'N' THEN NULL
WHEN aot.name = 'Misc.' THEN 'Y'
ELSE 'N'
END) AS show_details,
SUM(aoi.quantity * aoi.unit_price) as total
FROM . . .
我们的想法是将其他两个密钥设置为NULL
,以支持&#34;寄宿费用&#34;行。 GROUP BY
应更改为与SELECT
列匹配。