2014-12-30 3 views
0

Я конкатенирую два поля, и я хочу только заказать второе поле (p.organizationname). Это возможно?SQL Order С помощью concat

Я показываю это поле, поэтому мне нужно решение, которое не включает меня, чтобы выбрать поля отдельно.

Вот что я до сих пор:

SELECT distinct Concat(Concat(f.REFERENCEFILE, ','),p.ORGANIZATIONNAME) 
FROM PEOPLE p,FOLDER f,FOLDERPEOPLE fp,folderinfo fi... 
Order By concat(Concat(f.REFERENCEFILE, ','),p.ORGANIZATIONNAME) 
+0

Вы можете просто «ЗАКАЗАТЬ НА p.ORGANIZATIONNAME». – a1ex07

+1

@ a1ex07 Не при использовании 'SELECT DISTINCT' –

+0

, когда я пытаюсь получить ошибку« не выбранное выражение » – DEwok

ответ

2

Использование GROUP BY и ORDER BY агрегат вместо DISTINCT:

SELECT Concat(Concat(f.REFERENCEFILE, ','),p.ORGANIZATIONNAME) 
FROM PEOPLE p,FOLDER f,FOLDERPEOPLE fp,folderinfo fi... 
GROUP BY Concat(Concat(f.REFERENCEFILE, ','),p.ORGANIZATIONNAME) 
Order By MAX(p.ORGANIZATIONNAME) 

Проблема может быть проиллюстрирован на примере:

ID Col1 
1 Dog 
1 Cat 
2 Horse 

Отличный ID? Легко: 1,2

Отличный идентификационный заказ от Col1 ... wait .. какое значение Col1 следует использовать SQL? SQL запутан и сердит.

Поскольку вы используете конкатенацию двух полей и хотите отсортировать по одному из этих полей, можно также включить поле сортировки в DISTINCT подзапроса, а затем ORDER BY поле сортировки без включения его в SELECT списке.

1

Поскольку у вас есть DISTINCT ваш ORDER BY предложении должны быть указаны в SELECT, вы можете использовать подзапрос для достижения того же результата в вашем случае, так как различающиеся значения будут такими же, когда вы добавляете P.ORGANIZATIONNAME

SELECT col 
    FROM(SELECT distinct Concat(Concat(f.REFERENCEFILE, ','),p.ORGANIZATIONNAME) a, 
       p.ORGANIZATIONNAME b 
      FROM PEOPLE p,FOLDER f,FOLDERPEOPLE fp,folderinfo fi...) t 
    order by b