【发布时间】:2012-01-30 21:48:19
【问题描述】:
我问了这个问题并得到了 mysql 的一个很好的答案:How to assign date value to all returned mysql queries 但现在我需要在 MS SQL (SQL Server 2005) 中做同样的事情。需要注意的是,我有一个案例陈述似乎正在破坏事情。我有两个这样的查询:
select * from (select row_number()
over (order by a.device ASC)
AS rownum, a.device, staff, requestDate, m.maxDate, attribute =
REPLACE((SELECT attribute AS [data()]
FROM deviceList
WHERE device = a.device
ORDER BY device FOR xml PATH('')), ' ', ' ')
FROM deviceList a
INNER JOIN (SELECT device, MAX(requestDate) AS maxDate
FROM ASSIGNMENT GROUP BY device) m on m.device = a.device
RIGHT JOIN Assignment
ON (Assignment.device=a.device)
GROUP BY a.device, staff, maxDate, requestDate, contract)
AS B WHERE B.rownum > 0;
select * from (select row_number()
over (order by a.device ASC)
AS rownum, a.device, staff, requestDate, CONVERT(
varchar, dateadd(year,
(CASE
WHEN contract = '10' THEN 1
WHEN contract = '20' THEN 2
WHEN contract = '30' THEN 3
ELSE 3
END), m.maxDate) 107) as myEndDate, attribute =
REPLACE((SELECT attribute AS [data()]
FROM deviceList
WHERE device = a.device
ORDER BY device FOR xml PATH('')), ' ', ' ')
FROM deviceList a
INNER JOIN (SELECT device, MAX(requestDate) AS maxDate
FROM ASSIGNMENT GROUP BY device) m on m.device = a.device
RIGHT JOIN Assignment
ON (Assignment.device=a.device)
GROUP BY a.device, staff, myEndDate, requestDate, contract)
AS B WHERE B.rownum > 0;
第一个语句效果很好,就像条目(具有相同“设备”标签的条目)具有正确的 endDate。但是,当我尝试根据案例陈述增加日期时,事情就会出错。日期增加但不相同。为什么case语句会破坏这种性质的东西?
更新: 如果我对一台设备有两个日期值:
2/1/2010
1/1/2010
合约 = 10
查询后的日期分别为:
2/1/2011
2/1/2012
【问题讨论】:
标签: sql sql-server-2005