1.一道SQL語句面試題,關于group by 表內容: 2005-05-09 勝 2005-05-09 勝 2005-05-09 負 2005-05-09 負 2005-05-10 勝 2005-05-10 負 2005-05-10 負
如果要生成下列結果, 該如何寫sql語句?
??????????? 勝 負 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1))
insert into #tmp values('2005-05-09','勝') insert into #tmp values('2005-05-09','勝') insert into #tmp values('2005-05-09','負') insert into #tmp values('2005-05-09','負') insert into #tmp values('2005-05-10','勝') insert into #tmp values('2005-05-10','負') insert into #tmp values('2005-05-10','負') 1)select rq, sum(case when shengfu='勝' then 1 else 0 end)'勝',sum(case when shengfu='負' then 1 else 0 end)'負' from #tmp group by rq 2) select N.rq,N.勝,M.負 from ( select rq,勝=count(*) from #tmp where shengfu='勝'group by rq)N inner join (select rq,負=count(*) from #tmp where shengfu='負'group by rq)M on N.rq=M.rq 3)select a.col001,a.a1 勝,b.b1 負 from (select col001,count(col001) a1 from temp1 where col002='勝' group by col001) a, (select col001,count(col001) b1 from temp1 where col002='負' group by col001) b where a.col001=b.col001 2.請教一個面試中遇到的SQL語句的查詢問題 表中有A B C三列,用SQL語句實現:當A列大于B列時選擇A列否則選擇B列,當B列大于C列時選擇B列否則選擇C列。 ------------------------------------------ select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name 3.面試題:一個日期判斷的sql語句? 請取出tb_send表中日期(SendTime字段)為當天的所有記錄?(SendTime字段為datetime型,包含日期與時間) ------------------------------------------ select * from tb where datediff(dd,SendTime,getdate())=0 4.有一張表,里面有3個字段:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄并按以下條件顯示出來(并寫出您的思路):?? ?? 大于或等于80表示優秀,大于或等于60表示及格,小于60分表示不及格。?? ?????? 顯示格式:?? ?????? 語文????????????? 數學??????????????? 英語?? ?????? 及格????????????? 優秀??????????????? 不及格???? ------------------------------------------ select (case when 語文>=80 then '優秀' ??????? when 語文>=60 then '及格' else '不及格') as 語文, (case when 數學>=80 then '優秀' ??????? when 數學>=60 then '及格' else '不及格') as 數學, (case when 英語>=80 then '優秀' ??????? when 英語>=60 then '及格' else '不及格') as 英語, from table 5.在sqlserver2000中請用sql創建一張用戶臨時表和系統臨時表,里面包含兩個字段ID和IDValues,類型都是int型,并解釋下兩者的區別? ------------------------------------------ 用戶臨時表:create table #xx(ID int, IDValues int) 系統臨時表:create table ##xx(ID int, IDValues int)
區別: 用戶臨時表只對創建這個表的用戶的Session可見,對其他進程是不可見的. 當創建它的進程消失時這個臨時表就自動刪除.
全局臨時表對整個SQL Server實例都可見,但是所有訪問它的Session都消失的時候,它也自動刪除. 6.sqlserver2000是一種大型數據庫,他的存儲容量只受存儲介質的限制,請問它是通過什么方式實現這種無限容量機制的。 ------------------------------------------ 它的所有數據都存儲在數據文件中(*.dbf),所以只要文件夠大,SQL??? Server的存儲容量是可以擴大的. SQL Server 2000 數據庫有三種類型的文件:
主要數據文件 主要數據文件是數據庫的起點,指向數據庫中文件的其它部分。每個數據庫都有一個主要數據文件。主要數據文件的推薦文件擴展名是 .mdf。
次要數據文件 次要數據文件包含除主要數據文件外的所有數據文件。有些數據庫可能沒有次要數據文件,而有些數據庫則有多個次要數據文件。次要數據文件的推薦文件擴展名是 .ndf。
日志文件 日志文件包含恢復數據庫所需的所有日志信息。每個數據庫必須至少有一個日志文件,但可以不止一個。日志文件的推薦文件擴展名是 .ldf。 7.請用一個sql語句得出結果 從table1,table2中取出如table3所列格式數據,注意提供的數據及結果不準確,只是作為一個格式向大家請教。 如使用存儲過程也可以。
table1
月份mon 部門dep 業績yj ------------------------------- 一月份????? 01????? 10 一月份????? 02????? 10 一月份????? 03????? 5 二月份????? 02????? 8 二月份????? 04????? 9 三月份????? 03????? 8
table2
部門dep????? 部門名稱dname -------------------------------- ????? 01????? 國內業務一部 ????? 02????? 國內業務二部 ????? 03????? 國內業務三部 ????? 04????? 國際業務部
table3 (result)
部門dep 一月份????? 二月份????? 三月份 -------------------------------------- ????? 01????? 10??????? null????? null ????? 02????? 10???????? 8??????? null ????? 03????? null?????? 5??????? 8 ????? 04????? null????? null????? 9 ------------------------------------------ 1) select a.部門名稱dname,b.業績yj as '一月份',c.業績yj as '二月份',d.業績yj as '三月份' from table1 a,table2 b,table2 c,table2 d where a.部門dep = b.部門dep and b.月份mon = '一月份' and a.部門dep = c.部門dep and c.月份mon = '二月份' and a.部門dep = d.部門dep and d.月份mon = '三月份' and 2) select a.dep, sum(case when b.mon=1 then b.yj else 0 end) as '一月份', sum(case when b.mon=2 then b.yj else 0 end) as '二月份', sum(case when b.mon=3 then b.yj else 0 end) as '三月份', sum(case when b.mon=4 then b.yj else 0 end) as '四月份', sum(case when b.mon=5 then b.yj else 0 end) as '五月份', sum(case when b.mon=6 then b.yj else 0 end) as '六月份', sum(case when b.mon=7 then b.yj else 0 end) as '七月份', sum(case when b.mon=8 then b.yj else 0 end) as '八月份', sum(case when b.mon=9 then b.yj else 0 end) as '九月份', sum(case when b.mon=10 then b.yj else 0 end) as '十月份', sum(case when b.mon=11 then b.yj else 0 end) as '十一月份', sum(case when b.mon=12 then b.yj else 0 end) as '十二月份', from table2 a left join table1 b on a.dep=b.dep 8.華為一道面試題 一個表中的Id有多個記錄,把所有這個id的記錄查出來,并顯示共有多少條記錄數。 ------------------------------------------ select id, Count(*) from tb group by id having count(*)>1 select * from(select count(ID) as count from table group by ID)T where T.count>1 表形式如下:? Year????? Salary? 2000??????? 1000? 2001??????? 2000? 2002??????? 3000? 2003??????? 4000? 想得到如下形式的查詢結果? Year????? Salary? 2000????? 1000? 2001????? 3000? 2002????? 6000? 2003????? 10000? sql語句怎么寫?? 連接查詢? SELECT b.YEAR, SUM(a.salary) salary FROM hello a, hello b WHERE a.YEAR <= b.YEAR GROUP BY b.YEAR?
子查詢? select year ,(select sum(salary) from hello as B where B.year<=A.year ) from hello as A1.用一條SQL語句查詢出每門課都大于80分的學生姓名 name???kecheng???fenshu 張三?????語文???????81 張三?????數學???????75 李四?????語文???????76 李四?????數學???????90 王五?????語文???????81 王五?????數學???????100 王五?????英語???????90
A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)
2.學生表 如下: 自動編號???學號???姓名課程編號課程名稱分數 1????????2005001?張三 0001??????數學????69 2????????2005002 李四 0001??????數學????89 3????????2005001 張三 0001??????數學????69 刪除除了自動編號不同,其他都相同的學生冗余信息
A: delete tablename where?自動編號 not in(select min(自動編號) from tablename group by 學號,姓名,課程編號,課程名稱,分數) 一個叫department的表,里面只有一個字段name,一共有4條紀錄,分別是a,b,c,d,對應四個球對,現在四個球對進行比賽,用一條sql語句顯示所有可能的比賽組合. 你先按你自己的想法做一下,看結果有我的這個簡單嗎? 答:select a.name, b.name from team a, team b where a.name < b.name ? 請用SQL語句實現:從TestDB數據表中查詢出所有月份的發生額都比101科目相應月份的發生額高的科目。請注意:TestDB中有很多科目,都有1-12月份的發生額。 AccID:科目代碼,Occmonth:發生額月份,DebitOccur:發生額。 數據庫名:JcyAudit,數據集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur ************************************************************************************ 面試題:怎么把這樣一個表兒 year???month amount 1991???1?????1.1 1991???2?????1.2 1991???3?????1.3 1991???4?????1.4 1992???1?????2.1 1992???2?????2.2 1992???3?????2.3 1992???4?????2.4 查成這樣一個結果 year m1???m2???m3???m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4
答案一、 select year, (select amount from???aaa m where month=1???and m.year=aaa.year) as m1, (select amount from???aaa m where month=2???and m.year=aaa.year) as m2, (select amount from???aaa m where month=3???and m.year=aaa.year) as m3, (select amount from???aaa m where month=4???and m.year=aaa.year) as m4 from aaa???group by year ? 這個是ORACLE??中做的: select * from (select name, year b1, lead(year) over (partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over( partition by name order by year) rk from t) where rk=1; |