1樓:
select id,name,isnull((select sum(金額) from b表 where id=a表.id and bno=20),0) 正常消費,isnull((select sum(金額) from b表 where id=a表.id and bno=30),0) 充值,(select top 1 餘額 from b表 where id=a表.
id order by 時間 desc) 餘額,(select max(時間) from b表 where id=a表.id) 時間
from a表
這樣看一下行不行
2樓:丸子爸爸的日常
可以對連表查詢
select * from `a表名` a join `表名b` b join `表名c` c where a.id= b.id=c.id
希望你的問題能解決,望採納
3樓:咖啡嚶
select a.id,d.name,isnull(b.
zcxf,0) [正常消費],isnull(c.czxf,0) [充值],a.ye [餘額],a.
dt [時間]
from
(select id,餘額 ye,時間 dt
from b表 a
where exists(select id from (select id,max(時間) maxdt from b表) b where a.id = b.id and a.
時間 = b.maxdt)
) ainner join
a表 d
on a.id = d.id
left outer join
(select id,bno,sum(金額) zcxf
from b表
where bno = 20
group by id,bno
) bon a.id = b.id
left outer join
(select id,bno,sum(金額) czxf
from b表
where bno = 30
group by id,bno
) con a.id = c.id
-----------------------------------
select a.id,a.name
,case when b.bno = 20 then b.金額 else 0 end [正常消費]
,case when b.bno = 30 then b.金額 else 0 end [充值]
,b.餘額,b.時間
from a表 a,b表 b
where a.id = b.id
and b.時間 between '2015-01-01' and '2015-01-06'
sql語句查詢 5
sql多條件查詢語句
4樓:任好慕
select * from tab_name where 組號='001組' and to_char(日期,'yyyy-mm-dd')='2013-04-15' and 姓名1='小王'
union all
select * from tab_name where 組號='001組' and to_char(日期,'yyyy-mm-dd')='2013-04-15' and 姓名2='小王'
union all
select * from tab_name where 組號='001組' and to_char(日期,'yyyy-mm-dd')='2013-04-15' and 姓名3='小王'
union all
select * from tab_name where 組號='001組' and to_char(日期,'yyyy-mm-dd')='2013-04-15' and 姓名4='小王'
或者是:
select * from tab_name where 組號='001組' and to_char(日期,'yyyy-mm-dd')='2013-04-15' and 姓名1='小王' or 姓名2='小王' or 姓名3='小王' or 姓名4='小王'
寫複雜sql語句能力(電信行業報表sql)
5樓:匿名使用者
本人也是做這行的,有11年了,就你的問題只想跟你說:
1、sql語句其它沒什麼難度,首先了解左連線,右連線,全連線這三個方面的內容。
2、複雜sql也是基於簡單sql的基礎上,是一種簡單sql的靈活應用已。
3、有前輩帶領的環境下,最好向前輩門多多提問,不用看書,看一天書,不如前輩一分鐘的指導
4、業務部門有報表需求時,你要求接個簡單的,或從前輩那接過來,親自完成,但**一定要親自寫,不懂問前輩,這比什麼進步都快。
5、我帶過很多的徒弟,一般這麼要求他們,進步也很快,保證3次之後可獨立完成。
6樓:匿名使用者
首先,我想說的是千萬不要太著急,複雜的東西都是從簡單開始的,你現在基本的東西都已經掌握了,現在主要是把基本的東西怎麼組合起來。我也是在移動做運維的。剛開始情況跟你是一樣的。
然後在看複雜sql時,最好是能知道這個sql是要完成什麼目標的。(以下是我個人的方法)先看from,再看select的內容,再看where條件,對於group by ,join 可以更具select的內容一個一個的去看關聯,如果太多可以用筆記一下。(不要想著能把所有指令碼內容都能熟悉,我猜你們那的指令碼也是經過很多人完成的,一個人一個思想,自己去琢磨別人的思想,確實比較難)。
查詢sql問題要多看日誌,從日誌去定位出問題的指令碼位置,慢慢的看的遍數多了,你也就熟悉了。(還是要說一下,千萬不要急,每個人都是從不會到會,再到精通的)。
對於各種處理欄位的函式,一定要多在網上搜一下,多理解一下這個函式的作用,這樣才能靈活運用。
shell指令碼的編寫,可以先看一下基礎教程,網上很多的,然後編寫一下練習題,多看一下你們公司現有的資源,然後對照著你不懂的指令碼,再去網上或書上去找答案,這樣會加深你的理解。
先說到這吧,希望能對你有點幫助,有問題可以再互相溝通。(千萬不要急奧,向著自己的目標前進吧。)
7樓:匿名使用者
做大量的練習吧,然後,讓你們經理給你安排從簡單到難的查詢報表的任務,這樣你慢慢會提高,你說看書吧,不練也沒有用,資料庫只要知道基本語法,基本結構還是靠練,靠理解;
如何統計sql語句查詢出來的條數?
8樓:匿名使用者
可以通過count函式來實現。
sqlone:select * from tablename1 where id>5;此語句查詢出來多條記錄,之後看做一個新的表。
sqltwo:select conut(*) from (select * from tablename1 where id>5) as tablename2;此語句即可查詢出來統計的記錄條數。
備註:以上方法通用於所有的資料統計,如果是單表查詢,可以直接通過:「select count( *) from tablename1 where id>5"的形式查詢出結果。
9樓:千鳥
i=select count(1) from table
語句返回值即為查詢出來的條數.
示例如圖所示:
擴充套件:count() 函式返回匹配指定條件的行數。
語法(1). sql count(column_name) 語法
count(column_name) 函式返回指定列的值的數目(null 不計入):
select count(column_name) from table_namesql
(2). count(*) 語法
count(*) 函式返回表中的記錄數:
select count(*) from table_namesql
(3). count(distinct column_name) 語法
count(distinct column_name) 函式返回指定列的不同值的數目:
select count(distinct column_name) from table_name
10樓:匿名使用者
select conut(*) from tablename
11樓:匿名使用者
*改為count(*)就返回記錄條數了,當然也可以用recordset的count屬性
寫一條高效的sql查詢,該怎麼處理
12樓:司馬刀劍
優化sql查詢:如何寫出高效能sql語句
1、首先要搞明白什麼叫執行計劃?
執行計劃是資料庫根據sql語句和相關表的統計資訊作出的一個查詢方案,這個方案是由查詢優化器自動分析產生欀如一條sql語句如果用來從一個10萬條記錄的表中查1條記錄,那查詢優化器會選擇「索引查詢」方式,如果該表進行了歸檔,當前只剩下5000條記錄了,那查詢優化器就會改變方案,採用 「全表掃描」方式。
可見,執行計劃並不是固定的,它是「個性化的」。產生一個正確的「執行計劃」有兩點很重要:
(1) sql語句是否清晰地告訴查詢優化器它想幹什麼?
(2) 查詢優化器得到的資料庫統計資訊是否是最新的、正確的?
2、統一sql語句的寫法
對於以下兩句sql語句,程式設計師認為是相同的,資料庫查詢優化器認為是不同的。
select * from dual
select * from dual
其實就是大小寫不同,查詢分析器就認為是兩句不同的sql語句,必須進行兩次解析。生成2個執行計劃。
所以作為程式設計師,應該保證相同的查詢語句在任何地方都一致,多一個空格都不行!
3、不要把sql語句寫得太複雜
我經常看到,從資料庫中捕捉到的一條sql語句列印出來有2張a4紙這麼長。一般來說這麼複雜的語句通常都是有問題的。我拿著這2頁長的sql語句去請教原作者,結果他說時間太長,他一時也看不懂了。
可想而知,連原作者都有可能看糊塗的sql語句,資料庫也一樣會看糊塗。
一般,將一個select語句的結果作為子集,然後從該子集中再進行查詢,這種一層巢狀語句還是比較常見的,但是根據經驗,超過3層巢狀,查詢優化器就很容易給出錯誤的執行計劃。因為它被繞暈了。像這種類似人工智慧的東西,終究比人的分辨力要差些,如果人都看暈了,我可以保證資料庫也會暈的。
另外,執行計劃是可以被重用的,越簡單的sql語句被重用的可能性越高。而複雜的sql語句只要有一個字元發生變化就必須重新解析,然後再把這一大堆垃圾塞在記憶體裡。可想而知,資料庫的效率會何等低下。
4、使用「臨時表」暫存中間結果
簡化sql語句的重要方法就是採用臨時表暫存中間結果,但是,臨時表的好處遠遠不止這些,將臨時結果暫存在臨時表,後面的查詢就在tempdb中了,這可以避免程式中多次掃描主表,也大大減少了程式執行中「共享鎖」阻塞「更新鎖」,減少了阻塞,提高了併發效能。
5、 oltp系統sql語句必須採用繫結變數
select * from orderheader where changetime > 』2010-10-20 00:00:01′
select * from orderheader where changetime > 』2010-09-22 00:00:01′
以上兩句語句,查詢優化器認為是不同的sql語句,需要解析兩次。
如果採用繫結變數
select * from orderheader where changetime > @chgtime
@chgtime變數可以傳入任何值,這樣大量的類似查詢可以重用該執行計劃了,這可以大大降低資料庫解析sql語句的負擔。一次解析,多次重用,是提高資料庫效率的原則。
6、繫結變數窺測
C解析sql語句,C 中 SQL 查詢語句
語法錯誤 bai你在from後面的是一串dusql語句,所以語zhi句後是要加別名的。試試 daoselect sum 總額 回 from select distinct 合同,總額 from table where 專案 aa and型別答 a as tab select sum 總額 from ...
sql查詢top關鍵字,sql查詢語句 top n的用法
操作步驟如下 1 首先假設在sql server中有一個基本的資料庫,有6條資料。2 然後我們利用top關鍵字,就能利用top後面跟著數字就能篩選條數。3 此時執行測試,因為top後面的關鍵字為2,所以有2條資料。這樣就完成了操作。結構化查詢語言 structured query language ...
SQL語句,怎麼樣查成這個樣子,SQL語句請教 如何將查詢出的多個結果作為條件進行查詢?
create table t 單號 varchar 10 碼數 varchar 10 數量 int insert into t values sd 34 5 insert into t values sd 35 4 insert into t values sd 36 2 insert into t...