各位大大好
最近小弟在做一個篩選頁面的 ComboBox 選單
其中一個 ComboBox 我希望可以除了選擇資料表中的欄位資料以外,還能自己額外加入選項
預期結果如下範例:
我的 SQL Code 如下:
select [Name]
from [DB].[dbo].[my_table]
Union
Select '---ALL---'
Union
Select '---不選擇---'
Order by
case when [EnName]='---ALL---' then 0
when [EnName]='---不選---' then 2
else 1
end
不過這樣寫法會報錯:
「如果陳述式中包含 UNION、INTERSECT 或 EXCEPT 運算子,則選取清單中必須有 ORDER BY 項目。」
有點不太知道要怎麼修正 SQL 的寫法,希望版上大大能給予指點。
感恩感恩~
參考看看合不合用...
謝謝
這樣簡潔很多
我把這結合 一級屠豬士 大大的方法
就可以簡潔地寫出我要的結果了
最後結果參考:
WITH [select_index]
AS (
SELECT [Name], 1 as [ord]
FROM [DB].[dbo].[my_table]
UNION
SELECT '--- ALL ---' as [EnName], 0 as [ord]
UNION
SELECT '--- None ---' as [EnName], 2 as [ord]
)
select [Name]
FROM [select_index]
ORDER BY [ord] ASC
commit
DECLARE @TmpTable TABLE ( Name varchar(20) )
INSERT INTO @TmpTable
SELECT '王小明' UNION
SELECT '葉大雄' UNION
SELECT '多拉A夢'
SELECT '---ALL---' AS 'Name'
UNION
SELECT [Name]
FROM @TmpTable
create table t1104 (
id int
, n text
);
insert into t1104 values
(1, '王小明'),(2,'葉大雄'),(3,'多拉A夢');
with t1(n) as (
select n
from t1104
order by id
), t2(n, ordertag) as (
select '---ALL---', 0
union all
select n, 1
from t1
union all
select '---不選擇---', 2
)
select n
from t2
order by ordertag;
n
--------------
---ALL---
王小明
葉大雄
多拉A夢
---不選擇---
(5 rows)
CREATE TABLE [dbo].[my_table] (
[Name] nvarchar(20));
INSERT INTO my_table ([NAME])
VALUES (N'王小明'),
(N'葉大雄'),
-- 額外加入
(N'葉大雄'),
(N'多拉A夢');
SELECT [NO],[Name]
FROM (
SELECT [Name],RoW_NumBer() OVER (ORDER BY [Name]) AS [NO]
FROM [my_table]
GROUP BY [Name]
UNION
SELECT N'---ALL---' AS [Name] , 0 AS [NO]
FROM [my_table]
UNION
SELECT N'---不選擇---' AS [Name], COUNT(DISTINCT[Name]) + 1 AS NO
FROM [my_table]
) AS M
ORDER BY NO