2016-06-24 7 views
1

У меня есть запрос SQL, который в настоящее время показывает эти результаты:SQL запрос - заказ на первых двух букв в колонке

Product ID Vendor Site Location 
----------------------------------------------- 
ANTIFOAM 51 CHEMICAL COMPANY MANUFACTURING SITE 
ANTIFOAM 51 CHEMICAL COMPANY MANUFACTURING SITE 
ANTIFOAM 51 CHEMICAL COMPANY HQ HQ-FOOD 
ACID 509 CSPA MANUFACTURING SITE 
ACID 509 CSPA HQ HQ-FOOD 
ACID 509 NORTH MANUFACTURING SITE 
ACID 509 NORTH HQ HQ-FOOD 

Мне нужно заказать в штабе первой в линии, то место производства.

Любая помощь очень ценится!

Так оно и должно выглядеть следующим образом:

Product ID Vendor Site Location 
---------------------------------------- 
ANTIFOAM 51 CHEMICAL COMPANY HQ HQ-FOOD 
ANTIFOAM 51 CHEMICAL COMPANY MANUFACTURING SITE 
ANTIFOAM 51 CHEMICAL COMPANY MANUFACTURING SITE 
ACID 509 CSPA HQ HQ-FOOD 
ACID 509 CSPA MANUFACTURING SITE 
ACID 509 NORTH HQ HQ-FOOD 
ACID 509 NORTH MANUFACTURING SITE 
+3

Что DBMS вы используете? –

ответ

2

«HQ» предшествует «МА» в эн-нам локаль, поэтому при условии «HQ-FOOD» и «ПРОИЗВОДСТВУ SITE» являются только два значения в колонке, вы могли бы просто использовать порядок сортировки по умолчанию:

select * from table order by ID, SiteLocation, Vendor 
+0

Это не дает требуемого выхода. Он заказывает все записи «HQ-FOOD», которые имеют одинаковые идентификаторы «ID» перед любыми записями, отличными от 'HQ-FOOD', с этим« ID », независимо от поставщика. – bgoldst

0

в PostgreSQL:

select * from t1 
order by 
    id, 
    regexp_replace(vendor,'\s+HQ$',''), 
    case when site_location='HQ-FOOD' then 1 else 2 end 
; 

output

См. here для документации по адресу regexp_replace().


испытательному стенду

drop table if exists t1; 
create table t1 (product text, id int, vendor text, site_location text); 
insert into t1 (product,id,vendor,site_location) values 
    ('ANTIFOAM',51,'CHEMICAL COMPANY','MANUFACTURING SITE'), 
    ('ANTIFOAM',51,'CHEMICAL COMPANY','MANUFACTURING SITE'), 
    ('ANTIFOAM',51,'CHEMICAL COMPANY HQ','HQ-FOOD'), 
    ('ACID',509,'CSPA ','MANUFACTURING SITE'), 
    ('ACID',509,'CSPA HQ','HQ-FOOD'), 
    ('ACID',509,'NORTH','MANUFACTURING SITE'), 
    ('ACID',509,'NORTH HQ','HQ-FOOD') 
; 
0

Вы можете увидеть мой код (В SQL Server):

create table #t2 (product varchar(100), id int, vendor varchar(100), site_location varchar(100)); 
insert into #t2 (product,id,vendor,site_location) values 
    ('ANTIFOAM',51,'CHEMICAL COMPANY','MANUFACTURING SITE'), 
    ('ANTIFOAM',51,'CHEMICAL COMPANY','MANUFACTURING SITE'), 
    ('ANTIFOAM',51,'CHEMICAL COMPANY HQ','HQ-FOOD'), 
    ('ACID',509,'CSPA ','MANUFACTURING SITE'), 
    ('ACID',509,'CSPA HQ','HQ-FOOD'), 
    ('ACID',509,'NORTH','MANUFACTURING SITE'), 
    ('ACID',509,'NORTH HQ','HQ-FOOD') 

select product,id,vendor,site_location 
from #t2 
order by vendor desc 

drop table #t2 

Выход:

ACID 509 NORTH HQ HQ-FOOD 
ACID 509 NORTH MANUFACTURING SITE 
ACID 509 CSPA HQ HQ-FOOD 
ACID 509 CSPA MANUFACTURING SITE 
ANTIFOAM 51 CHEMICAL COMPANY HQ HQ-FOOD 
ANTIFOAM 51 CHEMICAL COMPANY MANUFACTURING SITE 
ANTIFOAM 51 CHEMICAL COMPANY MANUFACTURING SITE 
Смежные вопросы