按唯一模式或表排序的T-SQL查询

时间:2014-11-13 19:55:10

标签: sql-server tsql

我似乎无法在自定义或唯一的tsql顺序上找到任何google或stackOverflow结果。我知道有一种方法可以做到这一点,只是不确定它是否可以在T-SQL中使用。我想要做的是根据仓库位置,以特定的顺序返回一个查询。

我有一个返回此内容的查询 -

第一件事是我需要订单是列[Location]并且它的逗号分隔。例如,

FWD1,MAW1,D4Q5,O2G3B

需要订购D4Q5,FWD1,MAW1,O2G3B 但是,如果我希望位置以O2G3b,FWD1,D4Q5,MAW1的唯一顺序为例 或基于列表或其他位置表的任何订单

然后在[Location]列按顺序排列后,整个查询需要按相同顺序排序

修改

您如何通过

订购
item    location
-----------------
ITEM1        A
ITEM2        B
ITEM3        C
ITEM4        D 

进入任何其他顺序

item    location
-----------------
ITEM2        B
ITEM1        A
ITEM4        D
ITEM3        C 

1 个答案:

答案 0 :(得分:1)

我无法在没有更多细节的情况下完全回答您的问题,但我认为您正在寻找的是ORDER BY CASE,使用硬编码组(1,2等)拆分选项,然后在每个组中你也可以排序。

...按地理位置排序' D4Q5%'那么1结束,位置。

如果您还想要从查询中创建以逗号分隔的列表,则您需要使用CTE Select back a comma delimited list grouped by an ID

所以如果你也从那个页面中得到答案

select ET1.EntryID,
       (
       select ', '+T.Name
       from Tags as T
         inner join EntryTag as ET2
           on T.TagID = ET2.TagID
       where ET1.EntryID = ET2.EntryID
       for xml path(''), type
       ).value('substring(text()[1], 3)', 'varchar(max)') as TagsCommaDelimited
from EntryTag as ET1
group by ET1.EntryID

并根据列添加ORDER BY,我认为它基本上可以完成您按照表格中的列排序的内容

select ET1.EntryID,
       (
       select ', '+T.Name
       from Tags as T
         inner join EntryTag as ET2
           on T.TagID = ET2.TagID
       where ET1.EntryID = ET2.EntryID
       order by T.SortOrder
       for xml path(''), type
       ).value('substring(text()[1], 3)', 'varchar(max)') as TagsCommaDelimited
from EntryTag as ET1
group by ET1.EntryID