请问这样的sql语句该怎么写?

cnuninet 2002-10-21 10:38:49
我有一张表用来保存新闻,
表名:news

newsid 主键,自动增长
newstitle 新闻标题
newstype 1表示头条新闻 0表示一般新闻

请问如何得出这样的集:
第一条记录是最新的头条新闻
接下来的记录按照newid顺序排列?

谢谢
...全文
18 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hillhx 2002-10-21
  • 打赏
  • 举报
回复
你看我的了么?我的不可能错,至少我的思路是完全完全正确的
你再仔细看看,这是我测试过的,你好好看看
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[news]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[news]
GO

CREATE TABLE [dbo].[news] (
[newsid] [int] IDENTITY (1, 1) NOT NULL ,
[newstitle] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[newstype] [int] NULL
) ON [PRIMARY]
GO

--(2002-10-21 12:53:17)表 news数据量 7
INSERT INTO news ( newstitle , newstype ) VALUES ( 'aaa' , '0' ) ;
INSERT INTO news ( newstitle , newstype ) VALUES ( 'bbb' , '0' ) ;
INSERT INTO news ( newstitle , newstype ) VALUES ( 'ccc' , '1' ) ;
INSERT INTO news ( newstitle , newstype ) VALUES ( 'ddd' , '0' ) ;
INSERT INTO news ( newstitle , newstype ) VALUES ( 'eee' , '1' ) ;
INSERT INTO news ( newstitle , newstype ) VALUES ( 'fff' , '0' ) ;
INSERT INTO news ( newstitle , newstype ) VALUES ( 'ggg' , '1' ) ;

select *,0 as sortid
from news a
where a.newsid = (select max(newsid) from news c where c.newstype = '1')
union all
select *,newsid as sortid from news b where b.newstype = 0
order by sortid
gzhughie 2002-10-21
  • 打赏
  • 举报
回复
SELECT A.newsid, A.newstitle, A.newstype,
CASE WHEN newsid = (SELECT MAX(newsid) AS newsid FROM news WHERE newstype = 1)
THEN -1
ELSE newsid
END AS NUN
FROM news A
ORDER BY 4
newyu1127 2002-10-21
  • 打赏
  • 举报
回复
哦?cnuninet(玉树临风胜潘安) 问题最后出在哪?
既然解决了,也请麻烦写一下吧,让我们也再学习学习。
newyu1127 2002-10-21
  • 打赏
  • 举报
回复
嗯,不会啊。我这里试过了,你是不是只写了union把all忘了,如果这样倒是出现了你说的最新的不是头条新闻的新闻也会显示到数据集的最顶端的情况,即显示出的记录仍然是从1到最大的排法。哦,还有如果你newsid设为主键且递增的话,逻辑上应该就是最新的新闻newsid最大啊。
cnuninet 2002-10-21
  • 打赏
  • 举报
回复
搞定了,还是看了不懂装懂先生的一篇文章后才解决的。
cnuninet 2002-10-21
  • 打赏
  • 举报
回复
问题是,union的时候,最新的不是头条新闻的新闻也会显示到数据集的最顶端
newyu1127 2002-10-21
  • 打赏
  • 举报
回复
抛砖引玉吧,我写了个最土的方法:
select * from news where newsid=(select max(newsid)from news)union all select * from news where newsid<>(select max(newsid)from news)
希望师兄们写出更好的,请赐教谢谢。
cnuninet 2002-10-21
  • 打赏
  • 举报
回复
都不对啊
hillhx 2002-10-21
  • 打赏
  • 举报
回复
select a.newstitle as title,0 as sortid from news a where a.id = (select max(id) from news c where c.type = '1')
union all
select b.newstitle as title,id as sortid from news b where b.newstype = 0
order by sortid
大致就是这个意思,差不多吧,我没试。
你的ID应该是从1开始增长的吧
bzszp 2002-10-21
  • 打赏
  • 举报
回复
SELECT * FROM NEWS WHERE NEWTYPE = 1
UNION
SELECT * FORM NRWS ORDER BY REWID;
cnuninet 2002-10-21
  • 打赏
  • 举报
回复
最新的头条新闻由 newsid 主键,自动增长 判断
velen 2002-10-21
  • 打赏
  • 举报
回复
表中没时间记录,怎么知道哪个是最新的头条新闻.
做不到.
fqcd555 2002-10-21
  • 打赏
  • 举报
回复
楼上的,有意思。
我帮你跟他急。
hillhx 2002-10-21
  • 打赏
  • 举报
回复
我的不对么?不给分我和你急 :(
cnuninet 2002-10-21
  • 打赏
  • 举报
回复
gzhughie(hughie)的答案是对的,晚上给分
cnuninet 2002-10-21
  • 打赏
  • 举报
回复
关键在于,如果一个头条新闻,它是所有头条新闻中最新的,那么即使其它新闻的newsid>这个头条新闻的newsid,它也应该显示在最上面。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧