Я все еще работаю над тем, чтобы получить данные точно так, как я хочу, и они почти у цели - один последний вопрос.
Вот мой код:
DECLARE @QA1 TABLE (SID varchar(7), FormID varchar(max), DateExam date, Present varchar(3))
INSERT INTO @QA1 VALUES(1, 'Form1', '20110101', 'Yes')
INSERT INTO @QA1 VALUES(2, 'Form1', '20110201', 'Yes')
INSERT INTO @QA1 VALUES(3, 'Form1', '20110301', 'Yes')
INSERT INTO @QA1 VALUES(4, 'Form1', '20110401', 'Yes')
INSERT INTO @QA1 VALUES(5, 'Form1', '20110122', 'Yes')
INSERT INTO @QA1 VALUES(1, 'Form2', '20110222', 'Yes')
INSERT INTO @QA1 VALUES(2, 'Form2', '20110322', 'Yes')
INSERT INTO @QA1 VALUES(3, 'Form2', '20110422', 'Yes')
INSERT INTO @QA1 VALUES(1, 'Form3', '20110128', 'Yes')
INSERT INTO @QA1 VALUES(1, 'Form4', '20110228', 'Yes')
INSERT INTO @QA1 VALUES(5, 'Form5', '20110328', 'Yes')
INSERT INTO @QA1 VALUES(5, 'Form6', '20111228', 'Yes')
INSERT INTO @QA1 VALUES(4, 'Form2', '20111228', 'Yes')
SELECT SID,
ISNULL(MIN(CASE FormID WHEN 'Form1' THEN Present END), '') AS 'First Form',
ISNULL(MIN(CASE FormID WHEN 'Form2' THEN isnull(CONVERT(varchar(12),DateExam,107),'') END), '') as 'Date F2 Exam',
ISNULL(MIN(CASE FormID WHEN 'Form2' THEN Present END), '') AS 'Second Form',
ISNULL(MIN(CASE FormID WHEN 'Form4' THEN Present END), '') AS 'Fourth Form',
ISNULL(MIN(CASE FormID WHEN 'Form5' THEN Present END), '') AS 'Fifth Form',
ISNULL(MIN(CASE FormID WHEN 'Form6' THEN Present END), '') AS 'Sixth Form',
ISNULL(MIN(CASE FormID WHEN 'Form3' THEN Present END),
MIN(CASE FormID WHEN 'Form2' THEN isnull(CONVERT(varchar(12),DateExam,107),'') END)
) AS 'Third Form'
FROM @QA1
GROUP BY SID
ORDER BY SID
Это дает мнерезультат этого:
SID First Form Date F2 Exam Second Form Fourth Form Fifth Form Sixth Form Third Form
1 Yes Feb 22, 2011 Yes Yes Yes
2 Yes Mar 22, 2011 Yes Mar
3 Yes Apr 22, 2011 Yes Apr
4 Yes Dec 28, 2011 Yes Dec
5 Yes Yes Yes NULL
Что очень близко к тому, что я хочу, но я на самом деле хочу, чтобы столбец третьей формы был либо Да, либо Слишком, либо пустым ('') с просрочкой, определяемой каксегодня прошло более 34 дней после DateExam в Form2.
Последний оператор CASE успешно извлекает DateExam из Form2, но теперь мне нужно проверить, не просрочен ли он.Нужен ли мне другой CASE или вложенный if-then-else для добавления даты?Я знаю, что для добавления моих 34 дней мне нужен DATEADD (день 34, DateExam), и я проверю его по GETDATE (), но в какой форме должен быть оператор if-then-else внутри моего оператора CASE?
Спасибо