Re: [SQL ] 如何結合查詢的資料消失

看板Database作者時間13年前 (2012/07/17 15:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
參考看看可不可以用 DECLARE @tableA table ( Name varchar(50), ID int ) DECLARE @tableB table ( score int, [date] varchar(50), ID int ) INSERT INTO @tableA VALUES('Eric',1),('Mina',2),('Ruby',3),('Cathy',4),('Daniel',5) INSERT INTO @tableB VALUES(97,'1000101',1),(76,'1000202',1),(88,'1000103',2),(99,'1000203',2), (78,'1000115',1),(87,'1000201',3),(66,'1000202',2),(100,'1000302',5) select a.Name,a.ID,B.date,b.score, ( SELECT TOP 1 score from @tableB as c WHERE b.[date]>c.[date] AND c.ID=a.ID ORDER BY c.[date] DESC ) AS [上次成績], b.score- ( SELECT TOP 1 score from @tableB as c WHERE b.[date]>c.[date] AND c.ID=a.ID ORDER BY c.[date] DESC ) AS [差距] from @tableA as a,@tableB as b where a.ID=B.ID --AND a.ID=1 ORDER BY b.ID, b.[date] ASC ※ 引述《eric70378 (FA)》之銘言: : 想請問一下 有沒有辦法可以將這兩個 SQL 簡化後用一道SQL指令查詢 : 表A 姓名 Name 學號 ID : Eric 1 : Mina 2 : Ruby 3 : Cathy 4 : Daniel 5 : 表B 分數score 日期 date 學號ID : 97 1000101 1 : 76 1000202 1 : 88 1000103 2 : 99 1000203 2 : 78 1000115 1 : 87 1000201 3 : 66 1000202 2 : 100 1000302 5 : 原本第一個 SQL將1000101到1004001之間各個ID的分數查詢出來 : 而第二個 SQL 是將第一次SQL 查詢到的資料一筆一筆查詢與上一次考試的分數 : 比較這一次與上一次考試的分數 相比較 是進步還是退步 : 所以如果有五個成績五個成績都要跟上一次的成績做比較 : 如果上一次沒有成績 就為N/a : SQL1: select a.Name,a.ID,B.date,b.score from a,b where a.ID=B.ID : SQl2: select b.score where where B.date = (子查詢) : and b.ID=(SQL1查詢後輸入) : 子查詢: select max(date) form B where date not in( : select max(date) from B where ID= ? //ID為1為範例的話 ?=1 : ) : 請問有辦法可以將兩個 SQL 合併成一個 SQL 就查詢出來了嗎 : 想呈現的查詢結果如下 以ID=1為例 : 姓名 學號 分數 日期 與上一次分數相比 : Eric 1 97 1010101 N/a : Eric 1 78 1010115 -19 : Eric 1 76 1010202 -2 : 目前是用子查詢 把第二大的日期查出來 : 然後一筆一筆查 : 但是不知道該如何JOIN起來 然後可以一個 SQL 就查詢出來 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.41.57
文章代碼(AID): #1G1Ha-mL (Database)
文章代碼(AID): #1G1Ha-mL (Database)