一個復雜的sql 語句
汗一個,我用一個sql實現了,在Sql2005下測試通過:
DECLARE @key NVARCHAR(MAX);
SET @key = '中';--要搜索的關鍵詞
SELECT CASE
WHEN t IS NULL THEN N'(' + @key + N')' + SUBSTRING(k, LEN(@key) + 1, LEN(k))
ELSE N'(' + t + N')' + SUBSTRING(k, LEN(t) + 1, LEN(k))
END
FROM (
SELECT k,
(
SELECT TOP 1 k
FROM 關鍵詞表 a1
WHERE a2.k LIKE a1.k + '%'
) t
FROM 內容表 a2
WHERE k LIKE @key + '%'
) a
如果用一條sql實現,很困難,建議用存儲過程實現
或用程序去實現
復雜sql語句
語句(假設你的系統取日期月份的函數MONTH):
SELECT MONTH(注冊日期),COUNT(*) FROM 表 GROUP BY 1
產生的結果是:
1 23
2 10
3 45
如果你計算每個月度(200801、200802、……)的注冊人數,應該使用下面的語句(假設你的系統取日期年度的函數是YEAR):
SELECT YEAR(注冊日期)+" "+MONTH(注冊日期),COUNT(*) FROM 表 GROUP BY 1
假如你的系統連接字符串不是使用+,那換為相應的字符或者函數,比如INFORMIX是使用YEAR(注冊日期)||MONTH(注冊日期),比如MYSQL是使用CONCATE函數
補充:
SELECT語句的教材專門有聚合函數那一章,你仔細看看吧。
在SELECT語句里面,GROUP子句配合SUM,AVG,MAX,MIN等函數完成分類統計功能,執行我的兩個語句,查看輸出的結果,你就知道GROUP的含義,下面取一個最簡單的例子:
“SELECT COUNT(*) FROM 表”這個SQL語句返回的結果只有一個,就是數據庫中的總記錄條數,如果我們想統計不同用戶名的分組進行匯總的記錄條數,就應該在SELECT后增加一個字段,同事GROUP BY這個字段,完整的語句是:
SELECT 用戶名,COUNT(*) FROM 表 GROUP BY 用戶名
這個語句也可以這樣寫:
SELECT 用戶名,COUNT(*) FROM 表 GROUP BY 1
這時候GROUP BY后面的整數表示按照相應序號的SELECT列分組,這里的1表示第一個的選擇結果“用戶名”。如果我們想按用戶分組查記錄數,但是只現實有重復的記錄,那么用GROUP BY的一個HAVING修飾,完整語句如下:
SELECT 用戶名,COUNT(*) FROM 表 GROUP BY 用戶名 HAVING COUNT(*)>1
復雜sql語句查詢
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表 這樣看一下行不行。
復雜的sql語句
描述有點不具體,這個是把結果以列的形式展示:
select id,name,case when time1>time2 then '錯誤一' end as type1,
case when time1>time3 then '錯誤二' end as type2,
case when time4>time5 then '錯誤三' end as type3
from test
where name = '小明'
---結果集放在一起
select id,name,case when time1>time2 then '錯誤一' end +
case when time1>time3 then '錯誤二' end +
case when time4>time5 then '錯誤三' end as Result
from test
where name = '小明'
復雜SQL語句,怎么實現
這完全是兩步操作啊?一步是插入,一步是刪除原來B表和A表相同的數據
不知道你臨時表里是什么東西,不過幫你寫一個吧,但是只一個語句夠嗆
事先你最好先備份一下,以防出錯
--第一個select是選出
表A的商品編號與表B的商品編號相同且表A的打印點與表B的庫房編號相同的,則將其數量相加作為表B的數量,第二個select是B與A不同的,繼續保留:
insert into table_tmp select a.商品編號 商品編號,sum(a.數量) 數量,a.(打印點) 庫房編號 from A,B where a.商品編號=b.商品編號 and a.打印點=b.庫房編號 union all
select b.商品編號 b.數量,b.庫房編號 from A,B where a.商品編號b.商品編號 and a.打印點b.庫房編號
--然后清空表B
truncate table B;
--再然后把數據插回B中
insert into B select * from table_tmp;
復雜的sql語句
不是很復雜,只有一個子查詢,最后那個from里邊有很多內連接和外連接,主要是跟業務相關的,表多點不復雜,不知道你的業務邏輯,說不清楚主要函數,case when,就是根據不同的case選擇一個結果decode,跟case when差不多,DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )nvl,判斷是否為空的,NVL( string1, replace_with) ,如果為空就用replace_with代替group by rollup,不太容易說清楚,給你個連接自己看吧做個小例子也容易理解http://**ghostgant/article/details/5699731。
寫復雜SQL語句能力(電信行業報表SQL)
首先,我想說的是千萬不要太著急,復雜的東西都是從簡單開始的,你現在基本的東西都已經掌握了,現在主要是把基本的東西怎么組合起來。我也是在移動做運維的。剛開始情況跟你是一樣的。
然后在看復雜SQL時,最好是能知道這個SQL是要完成什么目標的。(以下是我個人的方法)先看from,再看select的內容,再看where條件,對于group by ,join 可以更具select的內容一個一個的去看關聯,如果太多可以用筆記一下。(不要想著能把所有腳本內容都能熟悉,我猜你們那的腳本也是經過很多人完成的,一個人一個思想,自己去琢磨別人的思想,確實比較難)。查找SQL問題要多看日志,從日志去定位出問題的腳本位置,慢慢的看的遍數多了,你也就熟悉了。(還是要說一下,千萬不要急,每個人都是從不會到會,再到精通的)。
對于各種處理字段的函數,一定要多在網上搜一下,多理解一下這個函數的作用,這樣才能靈活運用。
shell腳本的編寫,可以先看一下基礎教程,網上很多的,然后編寫一下練習題,多看一下你們公司現有的資源,然后對照著你不懂的腳本,再去網上或書上去找答案,這樣會加深你的理解。
先說到這吧,希望能對你有點幫助,有問題可以再互相溝通。(千萬不要急奧,向著自己的目標前進吧。)
一句復雜的SQL語句高手看看
select MCDJNBXH,QYMC,ZWZH,PYZH,QYLX,MCLB,DJJG,HZTZSWH,HZJG,MCBLQZ,HZRQ,'SL' as BM from SL_QYMCHZK where 1=1 AND MCLB in ('6','7','9','10','15') AND QYMC like "5566" //這是第一句 連執行一下看看它的結果集 如果我們命名如果集為數組$r_1select row_.*,rownum rownum_ from $r_1 row_ where rownum<=122//這是第二句 分析$r_1之后再看看這句的結果集 定義為$r_2Select * from $r_2 where rownum>101//最后出最終的結果集 從sql語句看$r_1 $r_2是表名。