我有一個表A,如果參數@x
是0,我想按日期排序,否則按名稱排序。 這是一個例子:SQL-ORDER BY in IF-ELSE CLAUSE
declare @x int set @x = 0
if(@x=0)(
SELECT * FROM A
order by DATE
)
else
(
SELECT * FROM A
order by Name
)
當嘗試做的SQL Server返回2 egual誤差作爲關鍵字「順序」附近
不正確的語法。
我該怎麼辦?
我有一個表A,如果參數@x
是0,我想按日期排序,否則按名稱排序。 這是一個例子:SQL-ORDER BY in IF-ELSE CLAUSE
declare @x int set @x = 0
if(@x=0)(
SELECT * FROM A
order by DATE
)
else
(
SELECT * FROM A
order by Name
)
當嘗試做的SQL Server返回2 egual誤差作爲關鍵字「順序」附近
不正確的語法。
我該怎麼辦?
declare @x int set @x = 0
if(@x=0)
begin
SELECT * FROM A
order by DATE
end
else
begin
SELECT * FROM A
order by Name
end
declare @x int
set @x = 0
IF (@x=0)
BEGIN
SELECT * FROM A order by DATE
END
ELSE
SELECT * FROM A order by Name
END
http://msdn.microsoft.com/en-us/library/aa933214(SQL.80).aspx
SELECT
*
FROM
A
ORDER BY
CASE WHEN @x = 0 THEN Date ELSE Name END
如果您的查詢變得相當複雜,然後將其複製到一個IF/ELSE可以變得相當繁重的兩側。你可以在你的ORDER BY中使用CASE表達式。在這種情況下,您可能會這樣做:
SELECT * FROM A ORDER BY CASE WHEN @x=0 THEN DATE END, CASE WHEN @x<>0 THEN Name END
這可以擴展到更多條件/列。你只需要確保每個CASE表達式都返回一個合理的數據類型。
試試這個
SELECT * FROM A
order by
Case @x When 0 Then Cast(DATE as sql_variant) Else Name End
鑄造需要動態排序帶有日期的工作 - 我試圖找到一個參考,但你需要一個可以自動澆鑄爲常見類型類型和日期無法完成。因此鑄造自己。
下面是一些選項的鏈接。請注意混合數據類型的部分。
括號(
和)
是錯誤。改爲使用BEGIN
和END
。
DECLARE @x INT
SET @x = 0
IF (@x = 0) BEGIN
SELECT * FROM A ORDER BY DATE
END
ELSE BEGIN
SELECT * FROM A ORDER BY Name
END
而且,在我看來,作爲DATE
列名是不是好主意。
正如答案中所述,但沒有解釋。
SQL使用BEGIN - END的語法,而不是()或{}的命令
我不知道它會工作的塊,假設'DATE'是日期類型和名稱是字符串類型。轉換到變體會有所幫助,但這可能會影響(以糟糕的方式)使用索引。 – 2010-11-02 10:12:33