【问题标题】:Sort by sub category using a union使用联合按子类别排序
【发布时间】:2015-05-01 22:56:20
【问题描述】:

现在我按 4 个类别排序并显示它们。第一类,农业,需要先将拖拉机分类在顶部,然后是其余的农业设备。拖拉机的 categoryid 为 1108、1109、1110、1111。

这是现在正在使用的查询:

SELECT category, manufacturer, model, serialnumber, stocknumber, owningbusinessunit, statecode, picturessortorder, yeartext, agriculturalequipmentid, listprice, locationidname, hours, detaileddescription, briefdescription
FROM AgriculturalEquipment 
ORDER BY category, manufacturer, model DESC, yeartext DESC

这是迄今为止我在 ag 类别中首先展示的拖拉机:

SELECT TOP 100000 category, categoryid, manufacturer, model, serialnumber, stocknumber, owningbusinessunit, statecode, picturessortorder, yeartext, agriculturalequipmentid, listprice, locationidname, hours, detaileddescription, briefdescription FROM agriculturalequipment WHERE categoryid IN
(SELECT CategoryID FROM (
SELECT top 100000 CategoryID
FROM AgriculturalEquipment AS AgriculturalEquipment
Where CategoryID in ('1108','1109','1110','1111')
ORDER BY categoryid, manufacturer, model DESC, yeartext DESC) A Group by a.categoryid) 

UNION

SELECT TOP 100000 category, categoryid, manufacturer, model, serialnumber, stocknumber, owningbusinessunit, statecode, picturessortorder, yeartext, sads_agriculturalequipmentid, listprice, locationidname, hours, detaileddescription, briefdescription FROM agriculturalequipment WHEREcategoryid IN
(SELECT CategoryID FROM(
SELECT top 100000 CategoryID
FROM AgriculturalEquipment AS AgriculturalEquipment 
WHERE CategoryID not in ('1108','1109','1110','1111')
ORDER BY category, manufacturer, model DESC, yeartext DESC) B GROUP BY categoryid)

这是我得到的结果。类别应该排序并从 1108 到 1111。我在这里做错了什么?

  Category                     catid   manufact

Tractors - 100 HP to 174 HP     1109    AGRI-POWER
Tractors - 100 HP to 174 HP     1109    CASE IH
Tractors - 100 HP to 174 HP     1109    JOHN DEERE
Tractors - 100 HP to 174 HP     1109    NEW HOLLAND
Tractors - 175 HP Or Greater    1108    AGCO ALLIS
Tractors - 175 HP Or Greater    1108    JOHN DEERE
Tractors - Less than 40 HP      1111    AGTRAXX
Tractors - Less than 40 HP      1111    FORDSON
Tractors - 100 HP to 174 HP     1109    INTERNATIONAL
Tractors - 100 HP to 174 HP     1109    JOHN DEERE
Tractors - 100 HP to 174 HP     1109    NEW HOLLAND
Tractors - 175 HP Or Greater    1108    BELL
Tractors - 175 HP Or Greater    1108    DEUTZ
Tractors - 40 HP to 99 HP       1110    AGRI TRACTOR
Tractors - Less than 40 HP      1111    AGTRAXX
Tractors - Less than 40 HP      1111    ALLMAND BROS
Tractors - 100 HP to 174 HP     1109    AGCO WHITE
Tractors - 100 HP to 174 HP     1109    NEW HOLLAND
Tractors - 100 HP to 174 HP     1109    NEW HOLLAND
Tractors - 100 HP to 174 HP     1109    NEW HOLLAND
Tractors - 175 HP Or Greater    1108    WHITE
Tractors - 40 HP to 99 HP       1110    AGRI TRACTOR

【问题讨论】:

    标签: sql sql-server database group-by union


    【解决方案1】:

    多种方法之一:

    SELECT *
    FROM AgriculturalEquipment 
    ORDER BY 
    CASE 
      WHEN CategoryID in ('1108','1109','1110','1111') THEN CategoryID
      ELSE CategoryID + 2000 -- 'penalize' other categories
    END,
    category, manufacturer, model DESC, yeartext DESC
    

    【讨论】:

    • 您能解释一下这个答案吗?
    • 如果 CategoryID 的行值不在列表中 ('1108','1109','1110','1111') 则添加 2000 以确保该行始终低于
    • SELECT TOP 100000 * FROM AgricultureEquipment ORDER BY WHEN sads_categoryid IN ('1108', '1109', '1110', '1111') THEN 1 ELSE 2 END,categoryid, Manufacturer,model跨度>
    【解决方案2】:

    您需要使用CategoryID 作为ORDER BY 子句中的第一列。

    SELECT category, manufacturer, model, serialnumber, stocknumber, owningbusinessunit, statecode, picturessortorder, yeartext, agriculturalequipmentid, listprice, locationidname, hours, detaileddescription, briefdescription
    FROM AgriculturalEquipment 
    ORDER BY CategoryID, category, manufacturer, model DESC, yeartext DESC
    

    【讨论】:

      猜你喜欢
      • 2018-05-18
      • 1970-01-01
      • 2014-08-15
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      相关资源
      最近更新 更多