我仍在努力将数据完全按照我想要的方式输出,而且几乎就在那里 - 最后一个问题。
这是我的代码:
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
这与我想要的非常接近,但我实际上希望第三表格列是“是”,“过期”或“空白”(''),其中定义的逾期,如果今天超过Form2的DateExam超过34天
最后一个CASE语句成功从Form2中提取DateExam,但现在我需要检查它是否过期。我是否需要另一个CASE或嵌套if-then-else来添加日期?我知道要添加我的34天我需要DATEADD(第34天,DateExam),我将根据GETDATE()检查它,但是if-then-else语句应该在我的CASE语句中使用什么形式?
谢谢
答案 0 :(得分:0)
尝试更改Third Form
定义,如下所示:
COALESCE(
MIN(CASE FormID WHEN 'Form3' THEN Present END),
CASE
WHEN DATEDIFF(D, MIN(CASE FormID WHEN 'Form2' THEN DateExam END), GETDATE()) > 34
THEN 'Overdue'
ELSE ''
END
) AS 'Third Form'