我想選擇carInventory表格的所有行,但首先要選擇具有某種藍色汽車的品牌。之后,每個品牌的汽車按年份分類。
我試圖改變這篇文章中給出的解決方案優先考慮表格中的特定值, 但在我弄清楚排名后我似乎無法將品牌保持在一起
SELECT
*, RANK() over(
partition by colBrand
order by case when colColor like '%blue%' then 1 else 0 end
) RANK FROM inventoryTable Order By Rank, colBrand, colYear
這是表格的外觀。起始表
| 品牌 | 制作 | 顏色 | 年 |
|---|---|---|---|
| 豐田 | 花冠 | 亞特蘭蒂斯藍 | 2015 |
| 福特 | 重點 | 碧沙藍 | 2016 年 |
| 波爾舍 | 泰康 | 灰色的 | 2019 |
| 大眾汽車 | 陶斯 | 藍色的 | 2015 |
| 大眾汽車 | 捷達 | 白色的 | 2020 |
| 福特 | 重點 | 阿茲特克紅 | 2018 |
搜索結果
| 品牌 | 制作 | 顏色 | 年 |
|---|---|---|---|
| 福特 | 重點 | 阿茲特克紅 | 2018 |
| 福特 | 重點 | 碧沙藍 | 2016 年 |
| 豐田 | 花冠 | 亞特蘭蒂斯藍 | 2015 |
| 大眾汽車 | 陶斯 | 藍色的 | 2020 |
| 大眾汽車 | 捷達 | 白色的 | 2015 |
| 波爾舍 | 泰康 | 灰色的 | 2019 |
uj5u.com熱心網友回復:
首先,汽車行業使用術語 Make 和 Model 來指代您所說的 Brand 和 Make。使用你自己的術語會讓很多人感到困惑。
我認為,如果您更準確、更完整地撰寫訂單邏輯,您將更容易找到解決方案的途徑。它有助于保持一致。什么是“ColBrand”?科爾年?IMO,您通過在列名前面加上冗余前綴來傷害每個人。這里的“col”指的是“列”?只是不要!
因此,您似乎想按 < 有藍色車輛的品牌/沒有藍色車輛的品牌>、品牌、年份降序排序。請注意,Make 不包含在您的訂購中。請注意,您的 Taos 在表中有 2015 年,但將那一年換成了所需輸出中的另一年。這是您應該發布腳本的原因之一 - 有助于避免此類錯別字并鼓勵其他人幫助您。
所以這里有另一種方法來實作這一點。CTE 選擇所有具有藍色的品牌。您只需將實際表外連接到 CTE 即可了解品牌是否滿足藍色條件。在 ORDER BY 子句的 CASE 運算式中使用該知識。
with blubr as (select distinct brand from @inventory where color like '%blue%')
select inv.brand, inv.make, inv.color, inv.year
from @inventory as inv left join blubr on inv.brand = blubr.brand
order by case when blubr.brand is not null then 0 else 1 end,
inv.brand, inv.year desc
;
小提琴演示注意先前答案的邏輯存在缺陷。我添加了一行來說明它。你看到了嗎?這是對該查詢的簡單修復。這個查詢更好嗎?不是真的,但它希望能幫助你思考實作相同目標的不同方法。
uj5u.com熱心網友回復:
有趣,也許下面的查詢可以做你需要的
我還做了一個演示小提琴
select *
from inventoryTable i
order by
case when exists ( select 1 from inventoryTable t
where t.colbrand=i.colbrand and t.colcolor like '%blue%') then 9999
else colYear end desc,colBrand asc, colyear desc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462424.html
下一篇:轉置多個相關列
