2016-04-21 110 views
0

令我有一個查詢:別名與

SELECT distinct(a0.ID,a0.str) 
from sev_modul_4_type1 as a0 
where ((lower(a0.str) LIKE '%а%')) 

,我想通過STR命令,但如果那樣做

select * from (
    SELECT distinct(a0.ID,a0.str) 
    from sev_modul_4_type1 as a0 
    where ((lower(a0.str) LIKE '%а%')) 
) x order by str desc 

我得到一個錯誤:

ERROR: column "str" does not exist 
LINE 1: ...s a0 where ((lower(a0.str) LIKE '%а%'))) x order by str desc 
                 ^

即使我使用sev_modul_4_type1.str,a0.str

我該怎麼做對不對?

我也試過order by 2 desc,但它給了我同樣的錯誤,這是確定只order by 1 desc(這種種的ID)

+2

'distinct'是***不是***功能。 '(a0.ID,a0.str)'是一個具有匿名行類型的**單**列。刪除這些括號。 –

+0

如果我需要得到一個包含兩個排序後的單列,該怎麼辦? F.E. '選擇不同於( SELECT * 從sev_modul_4_type1 其中((低級(sev_modul_4_type1.str)LIKE '%а%')) 順序由STR ASC ),爲A0'是(a0.ID, a0.str)打破此類 – Ghostleg

+0

爲什麼你想要一個包含兩個字段的列?我不知道你的意思是「打破這種狀況」。 'distinct'不是一個函數。除非你真的知道在一列中返回一個帶有兩個字段的匿名記錄類型意味着什麼,否則你不應該在列列表中包含圓括號 –

回答

1
select * from (
    SELECT distinct a0.ID, a0.str 
    from sev_modul_4_type1 as a0 
    where ((lower(a0.str) LIKE '%а%')) 
) x order by x.str desc 

嘗試去除不同括號和然後在你的ORDER BY子句中使用別名。

+0

我看到你也被問到關於將不同的值返回給一個列。我不知道你爲什麼想要這樣做,但是可以這樣做; 'SELECT SINGLE_COLUMN (SELECT DISTINCT CONVERT(NVARCHAR(255),a0.id)AS SINGLE_COLUMN FROM sev_modul_4_type1 A0 WHERE a0.str LIKE '%的%' UNION SELECT DISTINCT CONVERT(NVARCHAR(255),a0.str )AS SINGLE_COLUMN FROM sev_modul_4_type1 a0 WHERE a0.str LIKE'%a%')tbl ORDER by tbl.SINGL_COLUMN ASC' – Tizechie

1

嘗試這種方式

select * from (
    SELECT distinct a0.ID, 
       a0.str 
    from sev_modul_4_type1 as a0 
    where ((lower(a0.str) LIKE '%а%')) 
) x order by str desc