现有数据:
RowId Title Year 1 Aaa 2002 2 Bbb 2003 3 Ccc 2004 4 Ddd 2004 5 Eee 2005 6 Fff 2006 7 Ggg 2007 8 Hhh 2008
我需要根据输入参数检索上表中的数据,如下所示:
1. Select all records matching param year
2. Select all records matching param year +1
3. Select all records matching param year -1
4. Select all records matching param year +2
5. Select all records matching param year -2
6. Select all records matching param year +3
7. Select all records matching param year -3
预期结果(假设参与年是2005年):
RowId Title Year 5 Eee 2005 6 Fff 2006 3 Ccc 2004 4 Ddd 2004 7 Ggg 2007 2 Bbb 2003 8 Hhh 2008 1 Aaa 2002
我能够使用UNION在同一个表上使用多个SELECT来实现它,但是想知道是否有更好的方法来实现它。
感谢您的帮助!
答案 0 :(得分:3)
假设Year
是一个整数:
declare @param int
select *
from mytable
where Year = @param
or Year = @param + 1
or Year = @param - 1
-- etc.
order by abs(Year - @param), Year - @param desc, Title
order by
中的第一个条款按Year
和@param
之间的差异大小排序,第二个条款确保在消极差异之前出现正差异。
答案 1 :(得分:1)
SELECT * FROM TableName
WHERE Year = @Year Or
Year = @Year - 1 Or
Year = @Year + 1 Or
Year = @Year - 2 Or
Year = @Year + 2 Or
Year = @Year - 3 Or
Year = @Year + 3
ORDER BY ABS(Year - @Year)
答案 2 :(得分:0)
我会这样做:
select [Row], [Title], [Year], abs(year-2005) as thing
from table1
order by thing, year desc
答案 3 :(得分:0)
您需要更改2005年的参数,但这应该有效
select rowid, title, year FROM
(
select rowid, title, year, (year - 2005) c1, ABS (year - 2005) c2 from a
) t1
order by t1.c2, t1.c1 desc