如何解决如何在 SQL Server 中的 have 子句中使用多个案例
我编写了以下代码,它可以正常工作,但我必须在 year=2012 中添加第三个案例。
SELECT P.PRODUCT_NAME,s.PRODUCT_ID
FROM products P
JOIN SALES S
ON P.Product_ID = S.PRODUCT_ID
GROUP BY p.PRODUCT_NAME,S.PRODUCT_ID
having (sum(case when s.year = 2011 then s.quantity else 0 end) >
sum(case when s.year = 2010 then s.quantity else 0 end)
);
希望大家能理解我的问题。
解决方法
我找到了答案:
SELECT P.PRODUCT_NAME,s.PRODUCT_ID
FROM products P
JOIN SALES S
ON P.Product_ID = S.PRODUCT_ID
GROUP BY p.PRODUCT_NAME,S.PRODUCT_ID
having (sum(case when s.year = 2011 then s.quantity else 0 end) >
sum(case when s.year = 2010 then s.quantity else 0 end)
and
sum(case when s.year = 2012 then s.quantity else 0 end) >
sum(case when s.year = 2011 then s.quantity else 0 end)
);
,
SELECT P.PRODUCT_NAME,s.PRODUCT_ID
FROM products P
JOIN SALES S
ON P.Product_ID = S.PRODUCT_ID
GROUP BY p.PRODUCT_NAME,S.PRODUCT_ID
having
-- Product Wise Sold Quantity in 2021 > Sold Quantity in 2020
(
sum(case when s.year = 2021 then s.quantity else 0 end) >
sum(case when s.year= 2020 then s.quantity else 0 end)
)
OR -- You can use AND here as well
-- Product Wise Sold Quantity in 2020 > Sold Quantity in 2019
(
sum(case when s.year = 2020 then s.quantity else 0 end) >
sum(case when s.year= 2019 then s.quantity else 0 end)
)
以上解决方案肯定会起作用,并且可以根据您的需要进行更改。在这里,我使用了 2019、2020 和 2021 年。您可以根据您的业务需要更改它。然而,当您有更多数据量时,使用“case when then”或 where always here 性能会受到影响,但当我们在开发环境或 UAT 环境中工作时,这总是看起来不错。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。