SELECT * FROM 信息表 AS A ORDER BY CASE WHEN EXISTS(SELECT * FROM 附加条件表 WHERE A.id=id) THEN A.id ELSE 999999999999 END
DECLARE @信息表 table(id int,data varchar(20)) INSERT @信息表 VALUES(1,'123') INSERT @信息表 VALUES(2,'234') INSERT @信息表 VALUES(3,'345') INSERT @信息表 VALUES(4,'456')DECLARE @附加条件表 table(id int,data varchar(20)) INSERT @附加条件表 VALUES(2,'adbc') INSERT @附加条件表 VALUES(4,'adbc')SELECT * FROM @信息表 AS A ORDER BY CASE WHEN EXISTS(SELECT * FROM @附加条件表 WHERE A.id=id) THEN A.id ELSE 999999999999 END /* id data ----------- -------------------- 2 234 4 456 1 123 3 345(4 行受影响)*/
SELECT * FROM 信息表 AS A ORDER BY CASE WHEN EXISTS(SELECT * FROM 附加条件表 WHERE A.id=id) THEN A.id ELSE 999999999999 END, A.id --这里再加上这个
DECLARE @信息表 table(id int,data varchar(20)) INSERT @信息表 VALUES(1,'123') INSERT @信息表 VALUES(2,'234') INSERT @信息表 VALUES(3,'345') INSERT @信息表 VALUES(4,'456') INSERT @信息表 VALUES(5,'567')DECLARE @附加条件表 table(id int,data int) INSERT @附加条件表 VALUES(2,542) INSERT @附加条件表 VALUES(4,235) INSERT @附加条件表 VALUES(5,123)SELECT * FROM @信息表 AS A ORDER BY --如果存在.就存附加条件表里的data列进行排序. --你将这个data换成你实际表的列名 --如果不存在.则按信息表里的id排序 CASE WHEN EXISTS(SELECT * FROM @附加条件表 WHERE A.id=id) THEN (SELECT TOP 1 data FROM @附加条件表 WHERE id=A.id) ELSE 999999999999 END, A.id/* id data ----------- -------------------- 5 567 4 456 2 234 1 123 3 345(5 行受影响)*/
没弄出来,我再试试看。 我这里原来是没有附加条件表的,sql大概如下if @page_index=1 set @temp='select top '+str(@page_size)+' * from table_shop where '+@str_where+' order by '+@str_order_by else set @temp='select top '+str(@page_size)+' * from table_shop where '+@str_where+' and (shop_id not in (select top '+str((@page_index-1)*@page_size)+' shop_id from table_shop where '+@str_where+' order by '+@str_order_by+')) order by '+@str_order_by exec(@temp)现在多了一个附加条件表,我也不知道怎么插进去了
以前orderby是这样的if @order_by<>'' set @str_order_by=@order_by+' '+@taxis else set @str_order_by='last_edit_time desc'
select a.*,b.数字 from 信息表 a,附加条件表 b where a.id = b.id union select *,0 from 信息表 where 信息表.id not in (select id from 附加条件表) order by b.数字 desc以上语句没测试,楼主试试看能不能借鉴。
FROM 信息表 AS A
ORDER BY
CASE WHEN EXISTS(SELECT *
FROM 附加条件表
WHERE A.id=id)
THEN A.id
ELSE 999999999999
END
INSERT @信息表 VALUES(1,'123')
INSERT @信息表 VALUES(2,'234')
INSERT @信息表 VALUES(3,'345')
INSERT @信息表 VALUES(4,'456')DECLARE @附加条件表 table(id int,data varchar(20))
INSERT @附加条件表 VALUES(2,'adbc')
INSERT @附加条件表 VALUES(4,'adbc')SELECT *
FROM @信息表 AS A
ORDER BY
CASE WHEN EXISTS(SELECT *
FROM @附加条件表
WHERE A.id=id)
THEN A.id
ELSE 999999999999
END
/*
id data
----------- --------------------
2 234
4 456
1 123
3 345(4 行受影响)*/
SELECT *
FROM 信息表 AS A
ORDER BY
CASE WHEN EXISTS(SELECT *
FROM 附加条件表
WHERE A.id=id)
THEN A.id
ELSE 999999999999
END,
A.id --这里再加上这个
不过附加条件表的第二列是数字,不是字符串,排序不是按id,而是按照附加条件表的数字大小
INSERT @信息表 VALUES(1,'123')
INSERT @信息表 VALUES(2,'234')
INSERT @信息表 VALUES(3,'345')
INSERT @信息表 VALUES(4,'456')
INSERT @信息表 VALUES(5,'567')DECLARE @附加条件表 table(id int,data int)
INSERT @附加条件表 VALUES(2,542)
INSERT @附加条件表 VALUES(4,235)
INSERT @附加条件表 VALUES(5,123)SELECT *
FROM @信息表 AS A
ORDER BY
--如果存在.就存附加条件表里的data列进行排序.
--你将这个data换成你实际表的列名
--如果不存在.则按信息表里的id排序
CASE WHEN EXISTS(SELECT *
FROM @附加条件表
WHERE A.id=id)
THEN (SELECT TOP 1 data
FROM @附加条件表
WHERE id=A.id)
ELSE 999999999999
END,
A.id/*
id data
----------- --------------------
5 567
4 456
2 234
1 123
3 345(5 行受影响)*/
我这里原来是没有附加条件表的,sql大概如下if @page_index=1
set @temp='select top '+str(@page_size)+' * from table_shop where '+@str_where+' order by '+@str_order_by
else
set @temp='select top '+str(@page_size)+' * from table_shop where '+@str_where+' and (shop_id not in (select top '+str((@page_index-1)*@page_size)+' shop_id from table_shop where '+@str_where+' order by '+@str_order_by+')) order by '+@str_order_by
exec(@temp)现在多了一个附加条件表,我也不知道怎么插进去了
set @str_order_by=@order_by+' '+@taxis
else set @str_order_by='last_edit_time desc'
from 信息表 a,附加条件表 b
where a.id = b.id
union
select *,0
from 信息表
where 信息表.id not in
(select id from 附加条件表)
order by b.数字 desc以上语句没测试,楼主试试看能不能借鉴。
不过我改了半天还没有改出来,我再试试看了!谢谢!
不过我改了半天还没有改出来,我再试试看了!谢谢!