iT邦幫忙

1

MSSQL 如何抓科目1成績比較科目2高的成員

請問各位大大 小弟剛學資料庫 可以請問此題怎解嗎?
題目:如何抓科目1成績比較科目2高的成員
解答:no_read=2

我的資料庫table名稱為[test].[dbo].[scroe]
有三個欄位
[no_read],[subject],[score1]
('1','1','50')
('1','2','60')
('2','1','70')
('2','2','50')
('3','1','40')
('3','2','50')

Zed_Yang iT邦新手 3 級 ‧ 2021-02-08 10:04:43 檢舉
是指同一個 no_read中 score1 較高者?
Tom831212 iT邦新手 5 級 ‧ 2021-02-08 10:12:44 檢舉
是的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
rogeryao
iT邦超人 8 級 ‧ 2021-02-08 12:21:29
最佳解答
CREATE TABLE scroe (
no_read nvarchar(40) NULL ,
subject nvarchar(40) NULL ,
score1 int NULL);

INSERT INTO scroe (no_read,subject,score1)
VALUES 
('1','1',50),
('1','2',60),
('2','1',70),
('2','2',50),
('3','1',40),
('3','2',50),
('4','1',80),
('4','2',60),
('4','3',90),
('5','1',65),
('5','2',75),
('5','3',25);
-- 1.no_read 限定在 ('1','2','3'),subject 限定在 ('1','2')
SELECT *
FROM (
SELECT X.no_read,X.subject,X.score1,
X.score1 -
LEAD(X.score1,1) OVER (PARTITION BY X.no_read ORDER BY X.subject)  AS Result
FROM scroe AS X
WHERE X.no_read IN ('1','2','3') AND X.subject IN ('1','2')
) AS Y
WHERE Y.Result>0
ORDER BY Y.no_read

Demo

Tom831212 iT邦新手 5 級 ‧ 2021-02-08 13:28:25 檢舉

感謝大大提供這麼完整的範例 這麼多的狀況與結果 我好好專研一下

2
allenlwh
iT邦高手 1 級 ‧ 2021-02-08 10:16:21
SELECT t0.[no_read]
      ,t0.[subject]
      ,t0.[score1]
  FROM [MyLab].[dbo].[scroe] t0
	inner join [MyLab].[dbo].[scroe] t1 on t0.no_read=t1.no_read

	where t0.subject<t1.subject and t0.score1>t1.score1
Tom831212 iT邦新手 5 級 ‧ 2021-02-08 13:26:57 檢舉

感謝大大回覆 結果正確 原來再造一個一樣的來比較OK了

3
topcattw
iT邦新手 5 級 ‧ 2021-02-08 13:41:24

SELECT S1.no_read, S1.SS1
	, S2.SS2
FROM
(
	--取科目1的
	SELECT no_read, score1 SS1
	FROM [dbo].[scroe] (NOLOCK)
	WHERE [subject]='1'
) S1
INNER JOIN --將兩者關聯
(
	--取科目2的
	SELECT no_read, score1 SS2
	FROM [dbo].[scroe] (NOLOCK)
	WHERE [subject]='2'
) S2
	ON S1.no_read = S2.no_read
--這定條件SS2>SS1者
WHERE SS2>SS1

Tom831212 iT邦新手 5 級 ‧ 2021-02-09 10:16:48 檢舉

謝謝大大還幫我註解說明

我要發表回答

立即登入回答