我似乎无法在自定义或唯一的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
答案 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