Re: [SQL ] 如何結合查詢的資料消失
參考看看可不可以用
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
討論串 (同標題文章)