2012-06-13 49 views
6

說我有一個表「tblItems」:加上一個常數行的結果到SQL查詢 - MS訪問

*ID* |  *Name* 
1  | First Item 
2  | Second Item 

,我想這在表單中的下拉列表填充。我將如何添加一行:

ALL  | SHOW ALL 

成爲

*ID* |  *Name* 
1  | First Item 
2  | Second Item 
ALL  | SHOW ALL 

有一個查詢在Row Source組合框的地方?我一直沒能找到Access語法要做到這一點..

據我所知,我需要語法類似於

SELECT ID, Name FROM tblItems 
UNION 
SELECT 0, "All" FROM SOME.SYSTEM.DUMMY.TABLE 

什麼,我無法找到是訪問版本,虛表的。我真的不想有一個單獨的表格來存儲一行中的一個表格......但從我一直在閱讀的內容中我可能不得不這樣做。

+1

請訪問http://計算器。com/questions/3486299/dblookupcombobox-has-a-null-row/3486591#3486591 – Fionnuala

+0

使用同一張表比創建單行虛表更快,並且引用該表嗎?您顯示的查詢的兩個部分使用相同的'TableA',但是如果TableA很大,使用專用的虛擬表更有效嗎? – StuckAtWork

+0

您可以選擇任何保證不被刪除的表格。但是,我不認爲一張很大的桌子適合組合框,所以這似乎有些理論上的問題。 – Fionnuala

回答

7

你可以做這樣的事情:

select ID, Name 
from tblItems 
union all 
select 'ALL', 'SHOW ALL' 

如果你總是希望它出現在底部,你就必須變得更加複雜一點。

根據評論,我意識到,Access不支持SELECT聲明沒有FROM子句,這是令人討厭的。一種解決方法是創建一個表tblAll(語法可能需要修改):

create table tblAll(ID varchar(15), Name varchar(30)); 
insert into tblAll(ID, Name) values ('ALL', 'SHOW ALL'); 

那麼你可以做:

select ID, Name 
from tblAll 
union all 
select str(ID) as ID, Name 
from tblItems 
+0

您可能需要將您的'ID'轉換爲字符串值才能使其工作,我不確定MSAccess如何處理它。 –

+1

我收到一個錯誤,指出「查詢輸入必須包含至少一個表或查詢」。我有'Row Source'指向'Query2',它包含你的上面的語法。我嘗試過簡化我的代碼,並且無法使用此語法爲Access工作?我也直接從Query2窗口嘗試過它(數據表視圖拋出相同的錯誤) – StuckAtWork

+0

@StuckAtWork:這是不幸的,另外一個理由不會混淆訪問真正的數據庫系統。我已經更新了我的答案。 –

2

您可以使用UNION ALL,但是,你有常數之間的不匹配列(「ALL」不是整數)。你可能會這樣做:

select ID, NAME from tblItems 
union all 
select 0, 'SHOW ALL' 

在應用程序端,將ID解釋爲「SHOW ALL」。或者,將ID轉換爲字符串。

select str(ID), NAME from tblItems 
union all 
select 'ALL', 'SHOW ALL' 
+0

我認爲在'SHOW ALL'之後Access需要一個表格......這更多的是我需要的語法。它會拋出「在查詢中沒有表或查詢」的錯誤。我見過其他DB使用諸如「SYS.DUMMY」類型的東西作爲常量值的表名,但無法找到它的訪問。 – StuckAtWork

+0

@StuckAtWork請參閱上面的鏈接。 – Fionnuala

6

我要做的就是用一個SELECT TOP 1語句,並使用現有的表名,所以它看起來是這樣的:

SELECT ID, Name FROM tblItems 
UNION 
SELECT TOP 1 'ALL', 'SHOW ALL' FROM tblItems 

這會給你的單列與您現有的表選擇沿。你可以使用你想要的任何表格作爲TOP 1行。

+0

完美的工作!謝謝@Sean Sutton –

2

只是想解決傑里米Holovacs的答案在MS Access工作。這樣你可以使用同一張表,而不必創建一個虛擬表。

SELECT ID, Name 
FROM tblItems 
UNION ALL 
SELECT TOP 1 'ALL', 'SHOW ALL' 
FROM tblItems 
1

提醒你,以下僅如果有表中的任何行的工作,如果你有一個空表,它不會工作。

SELECT ID, Name 
FROM tblItems 
UNION ALL 
SELECT TOP 1 'ALL', 'SHOW ALL' 
FROM tblItems