1. 程式人生 > >SQL SERVER 下:1、遞歸查詢父分類下的各個子分類。 2、查詢每個商品分類中最貴的前兩個商品SQL

SQL SERVER 下:1、遞歸查詢父分類下的各個子分類。 2、查詢每個商品分類中最貴的前兩個商品SQL

nio span clas 適用於 商品 一行 class com 分享圖片

1、遞歸查詢父分類下的各個子分類。表設計:

技術分享圖片

SQL:

--CTE 語句(適用於MSSQL2005以後版本)
with cte_testNavi(Id,Name,Pid )
as
(
--這是查詢語句
SELECT Id,Name,Pid FROM Navi 
WHERE Name=汽車
union all
--這是需要遞歸的部分,CTE 自身調用完成循環遞歸查找
SELECT a.Id,a.Name,a.Pid FROM Navi a
INNER JOIN 
cte_testNavi b
ON 
(a.Pid=b.Id)
)
select * from cte_testNavi

2、查詢每個商品分類中最貴的前兩個商品SQL

表設計:

技術分享圖片

技術分享圖片

SQL:

--要求根據商品分類取出每個商品下最貴的前兩個物品
-- OVER( partition by c.ClassID order by i.Price DESC)over 開窗函數可以避免group by帶來的不包含在子列的情況,
--但是開窗函數會返回多行結果,要根據使用情況去判定,比如這裏我要按照ClassID商品類別ID進行分組
--RANK函數微軟的定義是:返回結果集分區內每行的排名。一行的排名是一個加上所涉及行之前的行列數。
--比如這裏我按Price價格去排序,取出每個分類下最貴的商品從上到下排序
SELECT * FROM
(
SELECT i.Price,i.CommodityName,c.ClassName,RANK() OVER
( partition by c.ClassID order by i.Price DESC) rank2 FROM CommodityInfo i INNER JOIN CommodityClass c ON i.CommodityClass=c.ClassID )R WHERE rank2<=2;

SQL SERVER 下:1、遞歸查詢父分類下的各個子分類。 2、查詢每個商品分類中最貴的前兩個商品SQL