2016-12-01 48 views
0

我有一個培訓機構的數據,其中我將有學生人數,學習,評估等級和天數。這個概念是每天(第1天到第7天)進行單一研究,將會有培訓發生,培訓結束時我們將對該研究進行評估。第7天后,將開始一項新的研究,並進行相同的過程。基於評估,將分配一個等級。SQL:檢查是否有多個級別之間的年級至少有1個級別的改善

甲級數據將是1,2,3,4

我需要的是,我需要檢查是否是有從1天學習的學生當天任何改善7.

如果至少有一個改進水平說,我需要將其分類爲改進。下面是例如

方案1幾種情況:

在研究評估1年級學生1

日1:3

日2:3
第3天:2第4天:2
第5天:2
第6天:2

日7:2

如果你比較1天

情景時,檢查上面的數據學生有第2天提高一個等級2:

年級學生2該研究評估1

日1:3

日2:3

第3天:3

第4天:1

日5:1

日6:2

天7:2

同樣地,在上述與第3天相比,學生在第4天有兩個改善水平的數據:

所以我需要找出第一天到第七天的改善水平,如果有改善,我會標記爲改進的學生。

如果從第1天到第7天沒有任何改善,它必須被歸類爲未改進。

我已經發布了我的refrence表格腳本,因爲我無法在sql小提琴中創建表格。

CREATE TABLE [DataBook1](
 
\t [FolderName] [varchar](50) NULL, 
 
\t [Grade] [varchar](50) NULL, 
 
\t [InstituteCode] [varchar](50) NULL, 
 
\t [StudentNumber] [varchar](50) NULL, 
 
\t [StudyNo] [varchar](50) NULL 
 
) ON [PRIMARY] 
 

 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'1', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'1', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'1', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'1', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'2', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'3', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'3', N'80-02', N'80-02-001', N'Study 2') 
 
GO

我試圖用ROW_NUMBER切換功能可獲取前行的值,但是我沒能得到我想要的輸出。

任何幫助,高度讚賞。

+1

如果學生從1-4-2變成什麼樣子?這是否代表改善?改善的定義不明確。 –

+0

這將被視爲改進。我想看看是否至少有一次改善。如果有改進,那麼它沒有問題。 –

回答

0

如果你想知道是否有年級任何下降,你可以使用lag()

select StudentNumber, 
     (case when sum(case when grade < prev_grade then 1 else 0 end) 
      then 'Improvement' 
      else 'No Improvement' 
     end) as flag 
from (select db.*, 
      lag(grade) over (partition by StudentNumber order by FolderName) as prev_grade 
     from DataBook1 db 
    ) db 
group by StudentNumber; 

不過,我不認爲這是改善吧,因爲你可以有像2-2-2-2-2-3-2這樣的情況,這對我來說似乎沒有太大的改善。

+0

嗨,是的。但是,不管怎樣,我都需要在任何一天進行改進。所以你的代碼適合我。我只是改變了case語句情況下,當db.Grade = db.prev_grade 那麼「0」 \t \t \t WHEN db.prev_grade爲null,則「0」 別人「1」 結束,我能得到什麼,我需要。謝謝你的幫助。 –