1樓:匿名使用者
access資料庫是可以用兩個表關聯的結果來更新其中一列表的。但是由於access jet引擎功能較弱,它只能用資料表中實際存在的列的值來更新其中一張表,對於計算得來的列的列值是無法用於更新的,哪怕是事前將有查詢關語句儲存為一個固定名稱的查詢也不成。
例如 update t2 a,(select a,count(a) as cnt from t1 group by a) b
set a.c=b.cnt where b.a=a.a;
或者將其中的子查詢“select a,count(a) as cnt from t1 group by a” 儲存為查詢“q1”
上述語句改寫如下
update t2 a,q1 b set a.c=b.cnt where b.a=a.a;
上述兩句的語法都沒問題,但是無法執行(報錯必須有可更新的查詢)
這麼辦?因為cnt列是計算得來的,jet無法利用該列更新t2的欄位c,那我們就利用一張中間表t3來繞過這個限制。
先執行生成表查詢,將上述子查詢結果儲存為表“t3”
select a,count(a) as cnt into t3 from t1 group by a;
再執行下列更新即可實現樓主的需求
update t2 a,t3 b set a.c=b.cnt where b.a=a.a;
如果以後要經常執行該操作,請先執行一下面兩個動作查詢來更新之前t3表裡已有的資料,以免舊有資料影響更新查詢的正確性。
1.清空舊資料
delete from t3;
2.存入新的子查詢結果
insert into t3 select a,count(a) as cnt from t1 group by a;
3.執行更新查詢,更新t2表的c列
update t2 a,t3 b set a.c=b.cnt where b.a=a.a;
確實有些麻煩,但是目前暫時還未能找到不借助中間t3表的sql語句解決方案。
其實更新t2表的c列有些多餘,因為我們可以非常方便地用選擇查詢得到你要的列表
select a.id,a.a,nz(b.cnt,0) as c from t2 a left join
(select a,count(a) as cnt from t1 group by a) b
on b.a=a.a;
一句選擇查詢就搞定了,實在是沒必要去花大把的精力來維護這個c列!
2樓:創作者
select [t2].a,[t2].c from [t2] left join select * from (select [t1].
a, count(*) as 數量 from [t1] group by [t1].a) as [查詢1] on [t2].a=[查詢1].
a;如果你覺得寫得累,可以用很簡單的辦法解決,直接把t1按a列統計一下,然後儲存為查詢1,再把查詢1跟t2連線查詢就可以了
3樓:匿名使用者
感覺上應該是用merge語句,可是我不會用access,不知道他裡面有沒有merge語句,而且merge沒有insert我也不知道行不行,你試試吧。不行就算了。
merge into t2
using (select a,count(*) b from t1 group by a) tt
on t2.a=tt.a
when matched then
update set
t2.c=tt.b;
4樓:love灬闖天涯
用程式分別連結sqlserver2008 和 access資料庫
然後進行**進行比較。
5樓:匿名使用者
select id,t2a,count(*) as c from (
select t1.a as t1a,t2.id,t2.a as t2a from t1,t2 where t1.a=t2.a
)c就是你需要的資料
6樓:匿名使用者
你在t1表中先彙總按a列,再與t2表關係一下,選出彙總列就可以了.
sql一個表中同時查詢兩個count的sql語句
7樓:匿名使用者
可以有兩種解決方法。
方法1:
select *****name
, count (1) as 總題數
, sum (case when statu = 1 then 1 else 0 end) as 稽核題數
from question
group by *****nme
方法2:
select s.總題數, s.稽核題數, s.*****name
from (
select count(1) as 總題數, case when status = 1 then count(1) else 0 end as 稽核題數, *****name
from question
--where *****name in (select distinct *****name from question), 這個條件可以不要了
group by *****nme, stauts -- status也要作為分組欄位,因為在case中有使用) s
8樓:微醫**網
可以有兩種解決方法,
所需工具:sql
查詢兩個count的方法1:
select *****name
, count (1) as 總題數
, sum (case when statu = 1 then 1 else 0 end) as 稽核題數
from question
group by *****nme
查詢兩個count的方法2:
select s.總題數, s.稽核題數, s.*****name
from (
select count(1) as 總題數, case when status = 1 then count(1) else 0 end as 稽核題數, *****name
from question
--where *****name in (select distinct *****name from question), 這個條件可以不要了
group by *****nme, stauts -- status也要作為分組欄位,因為在case中有使用
) s備註:兩個都可以使用。
9樓:
用case when根據條件計數:
select s.總題數, s.稽核題數, s.*****namefrom (
select count(1) as 總題數, case when status = 1 then count(1) else 0 end as 稽核題數, *****name
from question
--where *****name in (select distinct *****name from question), 這個條件可以不要了
group by *****nme, stauts -- status也要作為分組欄位,因為在case中有使用) s
10樓:鯨魚爸爸
除了count之外還有一個函式叫做 sum。
select *****name
, count (1) as 總題數
, sum (case when statu = 1 then 1 else 0 end) as 稽核題數
from question
group by *****nme
*****name in(select distinct *****name from question) 這個沒意義吧? 都是同一張question表,要不就是你表名寫錯了。
good luck !
在access資料庫中兩個表產生關聯怎麼寫sql語句
11樓:
在查詢設計器裡,將兩個表新增進來,點中其中一個表你要將它們關聯的欄位,拉到另一個表的相應欄位上去,然後在形成的線上雙擊,出來對話方塊,在裡面選擇關聯貫關係。
語句是:
select 表1.欄位1, 表2.欄位2 from 表1 inner join 表2 on 表1.欄位1 = 表2.欄位1
ACCESS資料庫Visual FoxPro資料庫程式有什麼區別?謝謝了啊
以下都是個人理解 這兩個資料庫都是桌面級資料庫。不能很好的提供瞬時併發的大資料量操作。不能很好的提供資料碎片整理以及資料壓縮操作。總之合適中小型的資料應用。access屬於檔案型資料庫和關係行資料庫之間結合2者的優點。由ado,odbc或ms access mdb 提供的資料庫驅動進行操作,入連線,...
excel匯入access資料庫
1.啟動access,新建一資料庫檔案。2.在 表 選項中,執行 檔案 獲取外部資料 匯入 命令,開啟 匯入 對話方塊。3.按 檔案型別 右側的下拉按鈕,選中 microsoft excel xls 選項,再定位到需要轉換的工作簿檔案所在的資料夾,選中相應的工作簿,按下 匯入 按鈕,進入 匯入資料表...
我想學資料庫哪個資料庫更好呢?Access還是SQL還是Oracle呢
對於初學者,我看還是sql吧。其實你說sql,應該叫sqlserver吧,畢竟是windows上的,安裝配置使用都好弄。oracle就比較囉嗦了。至於access,可以不用考慮。你看看sqlserver,access也就差不多了。語句差別不大。sql,是一種標準,各家公司都按照sql的標準,開發了自...