復雜的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 語句
汗一個,我用一個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 * From ( Select * From ( Select Number ,ChineseName ,*mentCode ,DepartmentName ,ShiftId ,ShiftName ,Degree ,AskForLeaveType ,WorkOnDate ,OnDutyType ,StartTime ,EndTime ,AOnDuty ,AOffDuty ,Allday ,*al ,'Error'= Case When Degree=1 AND StartTime0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=1 AND StartTime>=AOffDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=1 AND StartTime>=WorkOnDate+' '+'12:30' AND EndTime 0 AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=2 AND StartTime0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=2 AND StartTime>=AOffDuty AND EndTime0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=2 AND StartTime>=BOffDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=3 AND StartTime0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=3 AND StartTime>=AOffDuty AND EndTime0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=3 AND StartTime>=BOffDuty AND EndTime0 AND Left(AskForLeaveType,1)='0' Then 0 When Degree=3 AND StartTime>=COffDuty AND ShiftId>0 AND Left(AskForLeaveType,1)='0' Then 0 When ShiftId=0 AND Left(AskForLeaveType,1)='0' Then 0 When ShiftId>0 AND Left(AskForLeaveType,1)'0' AND Left(OnDutyType,1)=0 Then 0 When ShiftId>0 AND Left(AskForLeaveType,1)'0' AND Left(OnDutyType,1)=2 AND AskForLeaveType='出差假' Then 0 When ShiftId>0 AND Left(AskForLeaveType,1)'0' AND Left(OnDutyType,1)=2 AND AskForLeaveType='產假' Then 0 When ShiftId=0 AND Left(AskForLeaveType,1)'0' AND Convert(varchar(10),StartTime,108)='00:00:00' AND Convert(varchar(10),EndTime,108)='00:30:00' Then 0 Else 1 End From ( Select Number ,ChineseName ,DepartmentName ,*mentCode ,*d ,*ame ,Degree ,AskForLeaveType ,Convert(varchar(10),WorkOnDate,120) as 'WorkOnDate' ,StartTime ,EndTime ,AllDay ,SumTotal ,Case When Right(Convert(Varchar(10),WorkOnDate,120),5) IN (select Right(Convert(Varchar(10),HolidayDate,120),5) From AttendanceHoliday) THEN '2 - 公眾假上班' ELSE '0 - 平時上班' END AS 'OnDutyType' ,Case When Left(FristBrushDate,1)='1' AND Convert(varchar(10),AOffDuty,120)>Convert(varchar(10),AOnDuty,120) Then CAST(Convert(Varchar(11),Dateadd(dd,-1,OnDutyDate),120)+Convert(Varchar(5),AOnDuty,108) AS DateTime) ELSE CAST(Convert(Varchar(11),OnDutyDate,120)+Convert(Varchar(5),AOnDuty,108) AS DateTime) End AS 'AOnDuty' ,Case When Left(FristBrushDate,1)='0' AND Convert(varchar(10),AOnDuty,120)1 Group by Number,ChineseName,*mentCode,DepartmentName,*d,*ame,Degree,AskForLeaveType,AllDay,WorkOnDate,StartTime,EndTime,Sumtotal having Count(1)>1 ) tb3 ) tb4對你的代碼格式化后發現,還缺少一些語句,你是否粘貼完整了?讀完SQL語句后發現,其實是一個考勤核算的查詢語句,是兩個大的SQL查詢Union ALL的結果。
復雜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語句怎么寫
1、select * from 表 where year(列名) = year(getdate())-1 and month(列名)= 3 --這個比較容易理解,就不解釋了
2、select datepart(wk,dateadd(year,-1,getdate())) -- 去年的今天是去年的第幾周
select datepart(wk,dateadd(day,1-day(dateadd(year,-1,getdate())),dateadd(year,-1,getdate()))) -- 去年的本月的1號是去年的第幾周
select datepart(wk,dateadd(year,-1,getdate())) - datepart(wk,dateadd(day,1-day(dateadd(year,-1,getdate())),dateadd(year,-1,getdate()))) --上邊兩者相減就是去年的今天是去年本月的第幾周
一句復雜的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是表名。
一句復雜的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_1
select row_.*,rownum rownum_ from $r_1 row_ where rownum<=122
//這是第二句 分析$r_1之后再看看這句的結果集 定義為$r_2
Select * from $r_2 where rownum>101
//最后出最終的結果集 從sql語句看$r_1 $r_2是表名
一個比較復雜的sql語句
是不是少了一個字段,兄弟!
↑表結構↑
↑查詢語句和結果展示↑
SELECT
"1" AS '及格',"0" AS '不及格'
FROM
ZSH PIVOT (MAX(成績列) FOR 是否及格 IN("1","0")) KK
UNION
SELECT
"1" AS '及格',"0" AS '不及格'
FROM
ZSH PIVOT (MIN(成績列) FOR 是否及格 IN("1","0")) KK
雖然不知道你這樣做的意義是什么,但我給你弄出來了,你參考參考吧,有問題歡迎追問!!!