Hello Stack Overflow Community!ORDER BY不能與別名一起使用的MSSQL CASE
我坐在這裏,我的同事,我們正在努力解決我們目前有MSSQL 2014
的問題。我們有一個表列數,其中它們中的兩個包含日期。 只是爲了理解;一個日期('Liefertermin')顯示何時/是否實際交付,另一個日期('FreiesDatum1')顯示計劃何時交付。
如果'Liefertermin'不是空的,它應該顯示,否則'FreiesDatum1'應該出現。 我們用下面的查詢其作品,因爲它應該解決了這個:
SELECT
CASE
WHEN Liefertermin is null THEN cast(FreiesDatum1 as date)
ELSE Liefertermin
END as SortDate
FROM Beleg
當然也有在SELECT查詢一些列,但這些都不是必要的問題。我們希望分類具有動態性,所以我們可以選擇不同的類型。爲此,我們在開始時聲明瞭一個變量(@Sort),並在'order by'之後設置了一個CASE語句。
現在還出現了我們面臨的問題:
我們無法通過「SortDate」命令,也就是上面選擇,如果它矗立在CASE語句。如果我們只是做order by 'SortDate'
它工作沒有任何問題。
這是我們的嘗試,不工作:
order by CASE
when @Sort=1 then 'SortDate'
when @Sort=2 then 'Liefertermin'
when @Sort=3 then 'Name'
END
@排序= 1沒有,但@排序= 2,@排序= 3做工作,所以我想有沒有問題與CASE本身。刪除標記時,出現錯誤,列'SortDate'不存在。
我們已經嘗試將別名更改爲[SortDate]或'SortDate'而沒有任何成功,並嘗試使用派生表,但我們得到了相同的結果。
我們在這裏搜索了這些論壇,並嘗試瞭解CASE語句的其他問題的每個解決方案,但沒有一個能夠工作。
真的很希望在這裏得到幫助! 問候 3m7ecc
編輯:
以下是完整的SQL查詢
Declare @Sort integer;
Set @Sort = 1
select
Beleg.Belegnummer,
Beleg.Belegtyp,
Beleg.Datum,
wp.Projekt,
wp.Bezeichnung as 'Projektbezeichnung',
BELEG.Adressnummer,
BELEG.Firma,
BELEG.Ort,
convert(varchar(10),BELEG.Liefertermin,104) as Liefertermin,
convert(varchar(10),BELEG.FreiesDatum1,104) as iLiefertermin,
Beleg.Netto,
BELEG.Status,
cast(BELEG.Datum as date) as Erfassungsdatum,
CASE
when BELEG.Liefertermin is null then Beleg.FreiesDatum1
else BELEG.Liefertermin
END as SortDate
from BELEG
left join WPROJEKT as WP on (wp.Id = BELEG.Projekt)
where
(('01.09.2017' is null or convert(varchar(10),BELEG.Liefertermin,104) >= '01.09.2017')
and ('31.10.2017' is null or convert(varchar(10),BELEG.Liefertermin,104) <= '31.10.2017'))
and Beleg.belegtyp = 'B'
and ((BELEG.Liefertermin is null
and BELEG.FreiesDatum1 is null)
or (BELEG.Liefertermin <= GETDATE() or BELEG.FreiesDatum1 <= GETDATE()))
ORDER BY
CASE WHEN @Sort = 1 then SortDate END DESC,
CASE WHEN @Sort = 2 then Liefertermin END DESC,
CASE WHEN @Sort = 3 then BELEG.Belegnummer END DESC
我不認爲'SortDate'的順序正常工作。我會建議你使用沒有單引號的白色列名,使用類似[SortDate]或[Liefertermin]; –
在每種情況下,您都按常量進行排序:''SortDate''是一個字符串,而不是對'SortDate'列的引用。我想你想刪除''' –
首先感謝您的快速幫助,但正如我所說的,當我刪除標記,我得到了錯誤,該列不存在! – 3m7ecc